The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Раздел полезных советов: Как в программе на Си узнать от как..."
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Отдельный RSS теперь доступен для каждого обсуждения в форуме и каждого минипортала.
. "Как в программе на Си узнать от какого пользователя запущен активный экран" +/
Сообщение от pavlinux (ok), 05-Июн-10, 03:15 
Дополнение:

#include <stdio.h>
#include <stdlib.h>
#include <string.h> // strcmp
#include <utmpx.h>

#define XTTY  ":0"

int main(void)
{
    struct utmpx *entry;

    setutxent();

    while ((entry = getutxent()) != NULL) {
        if (!strcmp(entry->ut_line, XTTY) && (entry->ut_type == USER_PROCESS))

            printf("%s %s\n", entry->ut_line, entry->ut_user);
    }
    endutxent();
return(EXIT_SUCCESS);
}

Бережем наносекунды! - strcmpless version


#include <stdio.h>
#include <stdlib.h>
#include <string.h> // strcmp
#include <utmpx.h>

int main(void)
{
    const char *XTTY = ":0";
    struct utmpx *entry;
    short i = 0;

    setutxent();

    while ((entry = getutxent()) != NULL) {
        if (entry->ut_type == USER_PROCESS) {
            while (*XTTY && *entry->ut_line) {
                if (*XTTY++ != entry->ut_line[i++])
                    break;
            }
            if (*XTTY || entry->ut_line[i]) continue;

         printf("%s %s\n", entry->ut_line, entry->ut_user);
        }
    }
    endutxent();
    return(EXIT_SUCCESS);
}
/* Кто переделает без переменной i, тому с полки пирожок :) */


Тайный смысл в этих извращениях был такой:

При запуске системы грузится демон, который чёй-то там делает...
По сигналу свыше, этот демон должен снять дамп экрана Х-ов, если они есть и,
отослать вызывающему.
Как вы понимаете, демон грузится от рута, переменные окружения свои, так что,
ни какой речи о getenv, не может и быть. Вызывать who и парсить результаты вывода -
это через ж..пу и для web-программеров, они всё подряд парсят.

Собственно, если запустите strace -e open who, то увидите, что он именно так, через utmp и работает.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Раздел полезных советов: Как в программе на Си узнать от как..., auto_tips, 21-Май-10, 10:32  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру