Чтение онлайн

на главную - закладки

Жанры

Разработка приложений в среде Linux. Второе издание

Троан Эрик В.

Шрифт:

 10: #include <netinet/in.h>

 11: #include <arpa/inet.h>

 12: #include <utmp.h>

 13: #include <popt.h>

 14:

 15: void print_utmp_entry(struct utmp * u) {

 16: struct tm *tp;

 17: char * type;

 18: char addrtext[INET6_ADDRSTRLEN];

 19:

 20: switch (u->ut_type) {

 21: case EMPTY: type = "EMPTY"; break;

 22: case RUN_LVL: type = "RUN_LVL"; break;

 23: case BOOT_TIME: type = "BOOT_TIME"; break;

 24: case NEW_TIME: type = "NEW_TIME"; break;

 25: case OLD_TIME: type = "OLD_TIME"; break;

 26: case INIT_PROCESS: type = "INIT_PROCESS"; break;

 27: case LOGIN_PROCESS: type = "LOGIN_PROCESS"; break;

 28: case USER_PROCESS: type = "USER_PROCESS"; break;

 29: case DEAD_PROCESS: type = "DEAD_PROCESS"; break;

 30: case ACCOUNTING: type = "ACCOUNTING "; break;

 31: }

 32: printf("%-13s:", type);

 33: switch (u->ut_type) {

 34: case LOGIN_PROCESS:

 35: case USER_PROCESS:

 36: case DEAD_PROCESS:

 37: printf(" line: %s", u->ut_line);

 38: /* fall through */

 39: case INIT_PROCESS:

 40: printf("\n pid: %6d id: %4.4s", u->ut_pid, u->ut_id);

 41: }

 42: printf ("\n");

 43: tp = gmtime(&u->ut_tv.tv_sec);

 44: printf("time: %24.24s.%lu\n", asctime(tp), u->ut_tv.tv_usec);

 45: switch (u->ut_type) {

 46: case USER_PROCESS:

 47: case LOGIN_PROCESS:

 48: case RUN_LVL:

 49: case BOOT_TIME:

 50: printf("пользователь: %s\n", u->ut_user);

 51: }

 52: if (u->ut_type == USER_PROCESS) {

 53: if (u->ut_session)

 54: printf("
сеанс: %lu\n", u->ut_session);

 55: if (u->ut_host)

 56: printf (" хост: %s\n", u->ut_host);

 57: if (u->ut_addr_v6[0]) {

 58: if (!(u->ut_addr_v6[1] |

 59: u->ut_addr_v6[2] |

 60: u->ut_addr_v6[3])) {

 61: /* заполнение
только первой группы означает адрес IPV4 */

 62: inet_ntop(AF_INET, u->ut_addr_v6,

 63: addrtext, sizeof(addrtext));

 64: printf(" IPV4: %s\n", addrtext);

 65: } else {

 66: inet_ntop(AF_INET_6, u->ut_addr_v6,

 67: addrtext, sizeof(addrtext));

 68: printf (" IPV6: %s\n", addrtext);

 69: }

 70: }

 71: }

 72: if (u->ut_type == DEAD_PROCESS) {

 73: printf(" завершение : %u: %u\n",

 74: u->ut_exit.e_termination,

 75: u->ut_exit.e_exit);

 76: }

 77: printf("\n");

 78: }

 79:

 80: struct utmp * get_next_line (char * id, char * line) {

 81: struct utmp request;

 82:

 83: if (!id && !line)

 84: return getutent;

 85:

 86: memset(&request, 0, sizeof(request));

 87:

 88: if (line) {

 89: strncpy(&request.ut_line[0], line, UT_LINESIZE);

 90: return getutline(&request);

 91: }

 92:

 93: request.ut_type = INIT_PROCESS;

 94: strncpy(&request.ut_id[0], id, 4);

 95: return getutid(&request);

 96: }

 97:

 98: void print_file(char * name, char * id, char * line) {

 99: struct utmp * u;

100:

101: if (utmpname(name)) {

102: fprintf (stderr, "сбой при открытии базы данных utmp %s\n", name);

103: return;

104: }

105: setutent;

106: printf("%s:\n====================\n", name);

107: while ((u = get_next_line(id, line))) {

108: print_utmp_entry(u);

109: /* POSIX требует очистки статических данных перед

110: * повторным вызовом getutline или getutid

111: */

112: memset(u, 0, sizeof(struct utmp));

Поделиться:
Популярные книги

Идеальный мир для Лекаря 8

Сапфир Олег
8. Лекарь
Фантастика:
юмористическое фэнтези
аниме
7.00
рейтинг книги
Идеальный мир для Лекаря 8

Последняя Арена 6

Греков Сергей
6. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 6

По воле короля

Леви Кира
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
По воле короля

Душелов. Том 4

Faded Emory
4. Внутренние демоны
Фантастика:
юмористическая фантастика
ранобэ
фэнтези
фантастика: прочее
хентай
эпическая фантастика
5.00
рейтинг книги
Душелов. Том 4

Темный Лекарь 2

Токсик Саша
2. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 2

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

(Не) моя ДНК

Рымарь Диана
6. Сапфировые истории
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
(Не) моя ДНК

Протокол "Наследник"

Лисина Александра
1. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Протокол Наследник

Измена. Наследник для дракона

Солт Елена
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Измена. Наследник для дракона

Неудержимый. Книга II

Боярский Андрей
2. Неудержимый
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Неудержимый. Книга II

Камень. Книга 4

Минин Станислав
4. Камень
Фантастика:
боевая фантастика
7.77
рейтинг книги
Камень. Книга 4

Измена. Право на сына

Арская Арина
4. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на сына

Инквизитор Тьмы 4

Шмаков Алексей Семенович
4. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 4

Кротовский, сколько можно?

Парсиев Дмитрий
5. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кротовский, сколько можно?