Вход/Регистрация
Разработка приложений в среде Linux. Второе издание
вернуться

Троан Эрик В.

Шрифт:

 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));

113: }

114: endutent;

115: }

116:

117: int main(int argc, const char **argv) {

118: char * id = NULL, *line = NULL;

119: int show_utmp = 1, show_wtmp = 0;

120: int c;

121: poptContext optCon;

122: struct poptOption optionsTable[] = {

123: {"utmp", 'u', POPT_ARG_NONE|POPT_ARGFLAG_XOR,

124: &show_utmp, 0,

125: "переключить просмотр содержимого файла utmp", NULL},

126: { "wtmp", 'w', POPT_ARG_NONE | POPT_ARGFLAG_XOR,

127: &show_wtmp, 0,

128: "переключить просмотр содержимого файла wtmp", NULL},

129: {"id", 'i', POPT_ARG_STRING, &id, 0,

130: "показать записи процесса для заданного идентификатора inittab",

131: "<inittab id>" },

132: {"line", 'l', POPT_ARG_STRING, &line, 0,

133: "показать записи процесса для заданной строки устройства",

134: "<line>" },

135: POPT_AUTOHELP

136: POPT_TABLEEND

137: };

138:

139: optCon = poptGetContext("utmp", argc, argv, optionsTable, 0);

140: if ((c = poptGetNextOpt(optCon)) < -1) {

141: fprintf(stderr, "%s:%s\n",

142: poptBadOption(optCon, POPT_BADOPTION_NOALIAS),

143: poptStrerror(c));

144: return 1;

145: }

146: poptFreeContext(optCon);

147:

148: if (id && line)

149: fprintf(stderr, "Невозможно выбирать сразу по идентификатору и строке,"

150: "выбор по строке\n");

151:

152: if (show_utmp)

153: print_file(_PATH_UTMP, id, line);

154: if (show_utmp && show_wtmp)

155: printf("\n\n\n");

156: if (show_wtmp)

157: print_file(_PATH_WTMP, id, line);

158:

159: return 0;

160: }

16.2. Обзор

termios

Все манипуляции tty осуществляются с помощью одной структуры,

struct termios
, а также нескольких функций, определенных в заголовочном файле
<termios.h>
. Из этих функций широко применяются только шесть. Когда не нужно устанавливать скорость передачи данных по линии, используются только две наиболее важных функции —
tcgetattr
и
tcsetattr
.

#include <termios.h>

struct termios {

 tcflag_t c_iflag; /* флаги режима ввода */

 tcflag_t c_oflag; /* флаги режима вывода */

 tcflag_t c_cflag; /* флаги управляющего режима */

 tcflag_t c_lflag; /* флаги локального режима */

 cc_t c_line; /* дисциплина линии связи */

 cc_t c_cc[NCCS]; /* управляющие символы */

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

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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