The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"Как в программе на Си узнать от какого пользователя запущен активный экран"
Отправлено pavlinux, 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 и работает.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



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

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