Разработка приложений в среде 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
рейтинг книги
Последняя Арена 6
6. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
По воле короля
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Душелов. Том 4
4. Внутренние демоны
Фантастика:
юмористическая фантастика
ранобэ
фэнтези
фантастика: прочее
хентай
эпическая фантастика
5.00
рейтинг книги
Темный Лекарь 2
2. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Эволюция мага
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
(Не) моя ДНК
6. Сапфировые истории
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Протокол "Наследник"
1. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Измена. Наследник для дракона
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Неудержимый. Книга II
2. Неудержимый
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Камень. Книга 4
4. Камень
Фантастика:
боевая фантастика
7.77
рейтинг книги
Измена. Право на сына
4. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Инквизитор Тьмы 4
4. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Кротовский, сколько можно?
5. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
5.00