<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Раздел полезных советов: Как в программе на Си узнать от как...</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID3/67193.html</link>
    <description>#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;#include &amp;lt;string.h&amp;gt; // strcmp&lt;br&gt;#include &amp;lt;utmpx.h&amp;gt;&lt;br&gt;&lt;br&gt;#define XTTY  &quot;:0&quot;&lt;br&gt;&lt;br&gt;int main(void)&lt;br&gt;&#123;&lt;br&gt;    struct utmpx *entry;&lt;br&gt;&lt;br&gt;    setutxent();&lt;br&gt;&lt;br&gt;    while ( (entry = getutxent()) != NULL) &#123;&lt;br&gt;         if ( !strcmp(entry-&amp;gt;ut_line, XTTY) )&lt;br&gt;         printf(&quot;&#037;s &#037;s&#092;n&quot;,entry-&amp;gt;ut_line, entry-&amp;gt;ut_user);&lt;br&gt;    &#125;&lt;br&gt;    endutxent();&lt;br&gt;return(EXIT_SUCCESS);&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;URL: &lt;br&gt;Обсуждается: http://www.opennet.ru/tips/info/2376.shtml&lt;br&gt;</description>

<item>
    <title>Как в программе на Си узнать от какого пользователя запущен ... (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID3/67193.html#16</link>
    <pubDate>Sat, 05 Sep 2015 18:33:35 GMT</pubDate>
    <description>&amp;gt;pavlinux&lt;br&gt;&amp;gt;При запуске системы грузится демон, который чёй-то там делает...&lt;br&gt;&amp;gt;Как вы понимаете, демон грузится от рута&lt;br&gt;&lt;br&gt;Ну да, с тобой всё понятно, какир.&lt;br&gt;</description>
</item>

<item>
    <title>Корректный вариант (pavlinux)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID3/67193.html#15</link>
    <pubDate>Tue, 08 Jun 2010 22:41:11 GMT</pubDate>
    <description>&amp;gt;  if ( (entry-&amp;gt;ut_host&#091;0&#093;==&apos;:&apos;) &amp;&amp; (entry-&amp;gt;ut_host&#091;1&#093;==&apos;0&apos;) )&lt;br&gt;&lt;br&gt;1. Если б я так написал с самого начала, вы б нифига не поняли о чем речь :)&lt;br&gt;   Оптимизация это хорошо, но при условии хорошей документации. &lt;br&gt;&lt;br&gt;2. Хард-код это опасно, - entry-&amp;gt;ut_host&#091;1&#093;==&apos;0&apos; не есть entry-&amp;gt;ut_host&#091;1&#093; == 0; &lt;br&gt;Мелочь, а искать этот баг будешь ой как долго.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;</description>
</item>

<item>
    <title>Как в программе на Си узнать от какого пользователя запущен ... (pavlinux)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID3/67193.html#14</link>
    <pubDate>Fri, 04 Jun 2010 23:45:36 GMT</pubDate>
    <description>Ниже смотри...&lt;br&gt;</description>
</item>

<item>
    <title>Как в программе на Си узнать от какого пользователя запущен активный экран (pavlinux)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID3/67193.html#13</link>
    <pubDate>Fri, 04 Jun 2010 23:15:39 GMT</pubDate>
    <description>Дополнение: &lt;br&gt;&#091;code&#093;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;#include &amp;lt;string.h&amp;gt; // strcmp&lt;br&gt;#include &amp;lt;utmpx.h&amp;gt;&lt;br&gt;&lt;br&gt;#define XTTY  &quot;:0&quot;&lt;br&gt;&lt;br&gt;int main(void)&lt;br&gt;&#123;&lt;br&gt;struct utmpx *entry;&lt;br&gt;&lt;br&gt;setutxent();&lt;br&gt;&lt;br&gt;while ((entry = getutxent()) != NULL) &#123;&lt;br&gt;if (!strcmp(entry-&amp;gt;ut_line, XTTY) &amp;&amp; (entry-&amp;gt;ut_type == USER_PROCESS))&lt;br&gt;&lt;br&gt;printf(&quot;&#037;s &#037;s&#092;n&quot;, entry-&amp;gt;ut_line, entry-&amp;gt;ut_user);&lt;br&gt;&#125;&lt;br&gt;endutxent();&lt;br&gt; return(EXIT_SUCCESS);&lt;br&gt;&#125;&lt;br&gt;&#091;/code&#093;&lt;br&gt;&lt;br&gt;Бережем наносекунды! - strcmpless version&lt;br&gt;&lt;br&gt;&#091;code&#093;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;#include &amp;lt;string.h&amp;gt; // strcmp&lt;br&gt;#include &amp;lt;utmpx.h&amp;gt;&lt;br&gt;&lt;br&gt;int main(void)&lt;br&gt;&#123;&lt;br&gt;    const char *XTTY = &quot;:0&quot;;&lt;br&gt;    struct utmpx *entry;&lt;br&gt;    short i = 0;&lt;br&gt;&lt;br&gt;    setutxent();&lt;br&gt;&lt;br&gt;    while ((entry = getutxent()) != NULL) &#123;&lt;br&gt;        if (entry-&amp;gt;ut_type == USER_PROCESS) &#123;&lt;br&gt;            while (*XTTY &amp;&amp; *entry-&amp;gt;ut_line) &#123;&lt;br&gt;                if (*XTTY++ != entry-&amp;gt;ut_line&#091;i++&#093;)&lt;br&gt;                    break;&lt;br&gt;            &#125;&lt;br&gt;            if (*XTTY &amp;#124;&amp;#124; entry-&amp;gt;ut_line&#091;i&#093;) continue;&lt;br&gt;&lt;br&gt;         printf(&quot;&#037;s &#037;s&#092;n&quot;, ent</description>
</item>

<item>
    <title>Как в программе на Си узнать от какого пользователя запущен ... (Анонимко)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID3/67193.html#12</link>
    <pubDate>Tue, 25 May 2010 09:04:29 GMT</pubDate>
    <description>А понял, не о том речь. Пардоньте.&lt;br&gt;</description>
</item>

<item>
    <title>Как в программе на Си узнать от какого пользователя запущен активный экран (Анонимко)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID3/67193.html#11</link>
    <pubDate>Tue, 25 May 2010 09:03:29 GMT</pubDate>
    <description>printf( &quot;&#037;s&#092;n&quot;, getenv(&quot;LOGNAME&quot;) );&lt;br&gt;</description>
</item>

<item>
    <title>Как в программе на Си узнать от какого пользователя запущен активный экран (cvsup)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID3/67193.html#10</link>
    <pubDate>Mon, 24 May 2010 19:30:53 GMT</pubDate>
    <description>Есть небольшой нюанс, ut_host - расширение стандарта POSIX.1. Иными словами, нельзя использовать ut_host в переносимом коде, это поле в стандарт не входит.&lt;br&gt;</description>
</item>

<item>
    <title>Корректный вариант (Igor)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID3/67193.html#9</link>
    <pubDate>Mon, 24 May 2010 15:36:39 GMT</pubDate>
    <description>// code getactivescreenuser.cpp&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;#include &amp;lt;utmpx.h&amp;gt;&lt;br&gt;int main(void)&lt;br&gt;&#123;&lt;br&gt;    struct utmpx *entry;&lt;br&gt;    setutxent();&lt;br&gt;    while ( (entry = getutxent()) != NULL) &lt;br&gt;&#123;&lt;br&gt;          if ( (entry-&amp;gt;ut_host&#091;0&#093;==&apos;:&apos;)&amp;&amp;(entry-&amp;gt;ut_host&#091;1&#093;==&apos;0&apos;) )&lt;br&gt;         printf(&quot;&#037;s &#037;s&#092;n&quot;,entry-&amp;gt;ut_line, entry-&amp;gt;ut_user);&lt;br&gt;&#125;&lt;br&gt;    endutxent();&lt;br&gt;return(EXIT_SUCCESS);&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;Результат:&lt;br&gt;$ ./getactivescreenuser&lt;br&gt;tty1 igor&lt;br&gt;pts/2 igor&lt;br&gt;pts/3 igor&lt;br&gt;$ who&lt;br&gt;igor     tty1         2010-05-24 15:14 (:0)&lt;br&gt;igor     pts/2        2010-05-24 15:21 (:0.0)&lt;br&gt;igor     pts/3        2010-05-24 17:55 (:0.0)&lt;br&gt;igor     tty2         2010-05-24 18:35&lt;br&gt;</description>
</item>

<item>
    <title>На Bash/Awk (Igor)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID3/67193.html#8</link>
    <pubDate>Mon, 24 May 2010 14:04:24 GMT</pubDate>
    <description>Файл get_active_screen_user.sh:&lt;br&gt;&#091;CODE&#093;&lt;br&gt;#!/bin/bash&lt;br&gt;who &amp;#124; awk &apos;&#123; if(match($5,&quot;:0&quot;)!=0)  print $1 &quot; &quot; $2 &#125;&apos;&lt;br&gt;&#091;/CODE&#093;&lt;br&gt;&lt;br&gt;Итог:&lt;br&gt;&lt;br&gt;$ who&lt;br&gt;Результат:&lt;br&gt;igor     tty2         2010-05-24 16:53&lt;br&gt;root     tty3         2010-05-24 16:58&lt;br&gt;igor     tty1         2010-05-24 15:14 (:0)&lt;br&gt;igor     pts/2        2010-05-24 15:21 (:0.0)&lt;br&gt;igor     pts/3        2010-05-24 15:46 (:0.0)&lt;br&gt;&lt;br&gt;$ ./get_active_screen_user.sh&lt;br&gt;Результат:&lt;br&gt;igor tty1&lt;br&gt;igor pts/2&lt;br&gt;igor pts/3&lt;br&gt;P.S.: OS Fedora 11.&lt;br&gt;</description>
</item>

</channel>
</rss>
