Вход/Регистрация
Разработка приложений в среде 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);

  • Читать дальше
  • 1
  • ...
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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