На главную страницу
Форум txt.version   



Статья :: 17.6.3. Простой tftp-сервер : Майкл Джонсон

17.6.3. Простой tftp-сервер

Данный простой tftp-сервер иллюстрирует отправку и получение UDP-дейтаграмм как для подключенных, так и для неподключенных сокетов. Протокол tftp представляет собой несложный протокол передачи файлов, построенный на основе UDP[143]. Он часто используется встроенными компьютерными программами для пересылки первоначального загрузочного образа при сетевой загрузке. Сервер, который мы предлагаем рассмотреть, обладает рядом ограничений, поэтому он непригоден для какой-либо практической работы.

• С сервером одновременно может взаимодействовать только один клиент (этот недостаток легко устранить).

• Сервер может только отправлять файлы, но не может получать.

• Отсутствуют условия для ввода ограничений на передачу файлов анонимному удаленному пользователю.

• Выполняется очень поверхностная проверка ошибок, что, скорее всего, приведет к проблемам во время эксплуатации.

Клиент tftp начинает tftp-сеанс передачей "пакета запроса на чтение", содержащего имя файла, который нужно получить, и режим. Существует два исходных режима: netascii (выполняет некоторые простые преобразования файла) и octet (передает файл точно в таком же состоянии, в каком он находится на диске). Рассматриваемый сервер поддерживает только режим octet, поскольку он проще.

При получении запроса для чтения tftp-сервер посылает файл (512 байт за один раз). Каждая дейтаграмма содержит номер блока (нумерация начинается с единицы). Когда клиент получает блок данных, содержащий менее 512 байтов, он знает, что файл получен должным образом. После каждой дейтаграммы клиент посылает ответную дейтаграмму с номером блока, подтверждающую, что данный блок успешно получен. Как только сервер видит подтверждение, он отправляет следующий блок данных.

Основной формат дейтаграммы определен в строках 17-46. Некоторые константы указывают тип посылаемой дейтаграммы, а также код ошибки, отправляемой в том случае, если запрашиваемый файл не существует (все остальные ошибки обрабатываются непосредственно сервером). Структура struct tftpPacket описывает внешний вид дейтаграммы и код операции, следующей за данными, которая зависит от типа дейтаграммы. Затем логическое объединение, вложенное в структуру, определяет остальные форматы дейтаграмм для ошибок, данных и пакетов подтверждения.

Первая часть main() (строки 156—169) создает UDP-сокет и устанавливает номер локального порта с помощью вызова bind(). Последний является либо официальной tftp-службой, либо портом, указанным в качестве единственного аргумента командной строки программы. В отличие от нашего примера TCP-сервера здесь нет необходимости вызывать ни listen(), ни accept(), поскольку UDP работает без установки соединений.

После создания сокета сервер ожидает получение дейтаграммы путем вызова recvfrom(). Функция handleRequest(), которая активизируется в строке 181, преобразует запрашиваемый файл и возвращает его. После этого вызова сервер еще раз активизирует recvfrom() и ожидает запрос от следующего клиента.

Комментарий, расположенный перед вызовом handleRequest(), сообщает, что данный сервер можно легко переключить с итеративного сервера на параллельный, позволив каждому вызову handleRequest() работать как самостоятельному процессу.

В то время как главная часть программы использует неподключенный UDP-сокет (позволяющий любому клиенту соединение с ним), handleSocket() применяет для преобразования файла подключенный UDP-сокет[144]. После анализа имени файла, который нужно передать, и проверки правильности режима преобразования в строке 93 создается сокет с тем же самым семейством, типом и протоколом, с которыми контактировал сервер. Затем используется connect() для установки удаленного конца сокета на том адресе, от которого поступил запрос на файл, и начинается передача файла. После отправки каждого блока сервер ожидает пакет подтверждения, прежде чем продолжить передачу. Когда приходит последний пакет подтверждения, сервер закрывает сокет и возвращается к главному циклу.

Данный сервер, как правило, запускается с единственным аргументом — номером порта. Для проверки можно применить стандартную клиентскую программу tftp, где первый аргумент является именем хоста для соединения (неплохим выбором будет localhost), а второй — номером порта, на котором работает сервер. После запуска клиента нужно активизировать команду bin, при этом файлы будут запрашиваться в режиме octet, а не в стандартном режиме netascii. Как только это сделано, команда get позволит передать любой файл от сервера клиенту.

  1: /* tftpserver.c */

  2:

  3: /* Это частичная реализация tftp. Она не поддерживает даже тайм-ауты

  4:    или повторную передачу пакетов, и она не очень хорошо

  5:    обрабатывает непредвиденные события.*/

  6:

  7: #include <netdb.h>

  8: #include <stdio.h>

  9: #include <stdlib.h>

 10: #include <string.h>

 11: #include <sys/socket.h>

 12: #include <unistd.h>

 13: #include <fcntl.h>

 14:

 15: #include "sockutil.h" /* некоторые служебные функции */

 16:

 17: #define RRQ   1 /* запрос на чтение */

 18: #define DATA  3 /* блок данных */

 19: #define ACK   4 /* подтверждение */

 20: #define ERROR 5 /* возникла ошибка */

 21:

 22: /* коды ошибок tftp */

 23: #define FILE_NOT_FOUND 1

 24:

 25: struct tftpPacket {

 26:  short opcode;

 27:

 28:  union {

 29:   char bytes[514]; /* самый большой блок, который мы

 30:                       можем обработать, содержит 2 байта

 31:                       для номера блока и 512 для данных */

 32:   struct {

 33:    short code;

 34:    char message[200];

 35:   } error;

 36:

 37:   struct {

 38:    short block;

 39:    char bytes[512];

 40:   } data;

 41:

 42:   struct {

 43:    short block;

 44:   } ack;

 45:  } u;

 46: };

 47:

 48: void sendError(int s, int errorCode) {

 49:  struct tftpPacket err;

 50:  int size;

 51:

 52:  err.opcode = htons(ERROR);

 53:

 54:  err.u.error.code = htons(errorCode); /* файл не найден */

 55:  switch (errorCode) {

 56:  case FILE_NOT_FOUND:

 57:   strcpy(err.u.error.message, "файл не найден");

 58:   break;

 59:  }

 60:

 61:  /* 2 байта кода операции, 2 байта кода ошибки, сообщение и '\0' */

 62:  size = 2 + 2 + strlen(err.u.error.message) + 1;

 63:  if (send(s, &err, size, 0) != size)

 64:   die("erarorsend");

 65: }

 66:

 67: void handleRequest(struct addrinfo tftpAddr,

 68:  struct sockaddr remote, int remoteLen,

 69:  struct tftpPacket request) {

 70:  char * fileName;

 71:  char * mode;

 72:  int fd;

 73:  int s;

 74:  int size;

 75:  int sizeRead;

 76:  struct tftpPacket data, response;

 77:  int blockNum = 0;

 78:

 79:  request.opcode = ntohs(request.opcode);

 80:  if (request.opcode != RRQ) die("неверный код операции");

 81:

 82:  fileName = request.u.bytes;

 83:  mode = fileName + strlen(fileName) + 1;

 84:

 85:  /* здесь поддерживается только режим bin */

 86:  if (strcmp(mode, "octet")) {

 87:   fprintf(stderr, "неверный режим %s\n", mode);

 88:   exit(1);

 89:  }

 90:

 91:  /* требуется передача при помощи сокета того же семейства и типа,

 92:     с которым мы начинали */

 93:  if ((s = socket(tftpAddr.ai_family, tftpAddr.ai_socktype,

 94:   tftpAddr.ai_protocol)) < 0)

 95:   die("send socket");

 96:

 97:  /* установить удаленный конец сокета на адрес, который

 98:     инициирует данное соединение */

 99:  if (connect(s, &remote, remoteLen))

100:   die("connect");

101:

102:  if ((fd = open(fileName, O_RDONLY)) < 0) {

103:   sendError(s, FILE_NOT_FOUND);

104:   close(s);

105:   return;

106:  }

107:

108:  data.opcode = htons(DATA);

109:  while ((size = read(fd, data.u.data.bytes, 512)) > 0) {

110:   data.u.data.block = htons(++blockNum);

111:

112:   /* размер составляют 2 байта (код операции), 2 байта (номер блока) и данные*/

113:   size += 4;

114:   if (send(s, &data, size, 0) != size)

115:    die("data send");

116:

117:   sizeRead = recv(s, &response, sizeof(response), 0);

118:   if (sizeRead < 0) die("recv ack");

119:

120:   response.opcode = ntohs(response.opcode);

121:   if (response.opcode != ACK) {

122:    fprintf(stderr, "непредвиденный код операции в отклике\n");

123:    exit(1);

124:   }

125:

126:   response.u.ack.block = ntohs(response.u.ack.block);

127:   if (response.u.ack.block != blockNum) {

128:    fprintf(stderr, "получено подтверждение неверного блока\n");

129:    exit(1);

130:   }

131:

132:   /* если блок, который мы только что отправили, содержит

133:      меньше 512 байт, то задача выполнена */

134:   if (size < 516) break;

135:  }

136:

137:  close(s);

138: }

139:

140: int main(int argc, char ** argv) {

141:  struct addrinfo hints, * addr;

142:  char * portAddress = "tftp";

143:  int s;

144:  int rc;

145:  int bytes, fromLen;

146:  struct sockaddr from;

147:  struct tftpPacket packet;

148:

149:  if (argc > 2) {

150:   fprintf(stderr, "использование: tftpserver [порт]\n");

151:   exit(1);

152:  }

153:

154:  if (argv[1]) portAddress = argv[1];

155:

156:  memset(&hints, 0, sizeof (hints));

157:

158:  hints.ai_socktype = SOCK_DGRAM;

159:  hints.ai_flags = AI_ADDRCONFIG | AI_PASSIVE;

160:  if ((rc = getaddrinfo(NULL, portAddress, &hints, &addr)))

161:   fprintf(stderr, "сбой поиска порта %s\n",

162:    portAddress);

163:

164:  if ((s = socket(addr->ai_family, addr->ai_socktype,

165:   addr->ai_protocol)) < 0)

166:   die("socket");

167:

168:  if (bind(s, addr->ai_addr, addr->ai_addrlen))

169:   die("bind");

170:

171:  /* Основной цикл состоит из ожидания tftp-запроса, его обработки

172:     и затем ожидания следующего запроса. */

173:  while (1) {

174:   bytes = recvfrom(s, &packet, sizeof(packet), 0, &from,

175:    &fromLen);

176:   if (bytes < 0) die("recvfrom");

177:

178:   /* Если выполнить разветвление перед вызовом handleRequest() и

179:      завершить дочерний процесс после возврата функции, то данный

180:      сервер будет работать точно как параллельный tftp-сервер */

181:   handleRequest(*addr, from, fromLen, packet);

182:  }

183: }




17.6.3. Простой tftp-сервер : Майкл Джонсон

страницы в данном разделе 
Разработка приложений в среде Linux. Второе издание Linux Application Development. Second Edition : Майкл Джонсон Часть I Начало работы : Майкл Джонсон
1.1. Краткая история свободного программного обеспечения Unix : Майкл Джонсон 1.2. Разработка Linux : Майкл Джонсон
1.3. Важные факты в создании систем Unix : Майкл Джонсон Глава 2 Лицензии и авторские права : Майкл Джонсон
2.1. Авторское право : Майкл Джонсон 2.2. Лицензирование : Майкл Джонсон
2.3. Лицензии на свободное ПО : Майкл Джонсон 2.3.6. Несовместимости лицензий : Майкл Джонсон
Глава 3 Онлайновая системная документация : Майкл Джонсон 3.1. Оперативные страницы руководства : Майкл Джонсон
1.1. Краткая история свободного программного обеспечения Unix : Майкл Джонсон 1.2. Разработка Linux : Майкл Джонсон
1.3. Важные факты в создании систем Unix : Майкл Джонсон 1.1. Краткая история свободного программного обеспечения Unix : Майкл Джонсон
1.2. Разработка Linux : Майкл Джонсон 1.3. Важные факты в создании систем Unix : Майкл Джонсон
2.1. Авторское право : Майкл Джонсон 2.2. Лицензирование : Майкл Джонсон
2.3. Лицензии на свободное ПО : Майкл Джонсон 2.3.6. Несовместимости лицензий : Майкл Джонсон
2.1. Авторское право : Майкл Джонсон 2.2. Лицензирование : Майкл Джонсон
2.3.6. Несовместимости лицензий : Майкл Джонсон 2.3.6. Несовместимости лицензий : Майкл Джонсон
3.1. Оперативные страницы руководства : Майкл Джонсон 3.1. Оперативные страницы руководства : Майкл Джонсон
Часть II Инструментальные средства и среда разработки : Майкл Джонсон продолжение 29 : Майкл Джонсон
4.1. Редакторы : Майкл Джонсон продолжение 31 : Майкл Джонсон
4.1.1. Emacs : Майкл Джонсон 4.2. make : Майкл Джонсон
продолжение 34 : Майкл Джонсон 4.2.1 Сложные командные строки : Майкл Джонсон
4.2.2. Переменные : Майкл Джонсон 4.2.3. Суффиксные правила : Майкл Джонсон
4.3. Отладчик GNU : Майкл Джонсон 4.4. Действия при трассировке программы : Майкл Джонсон
Глава 5 Опции и расширения gcc : Майкл Джонсон 5.1. Опции gcc : Майкл Джонсон
5.2. Заголовочные файлы : Майкл Джонсон Глава 6 Библиотека GNU C : Майкл Джонсон
6.1. Выбор возможностей glibc : Майкл Джонсон 6.2. Интерфейсы POSIX : Майкл Джонсон
6.2.1. Обязательные типы POSIX : Майкл Джонсон 6.2.2. Раскрытие возможностей времени выполнения : Майкл Джонсон
6.2.3. Поиск и настройка базовой системной информации : Майкл Джонсон 6.3. Совместимость : Майкл Джонсон
Глава 7 Средства отладки использования памяти : Майкл Джонсон 7.1. Код, содержащий ошибки : Майкл Джонсон
7.2. Средства проверки памяти, входящие в состав glibc : Майкл Джонсон 7.2.1. Поиск повреждений кучи : Майкл Джонсон
7.2.2. Использование mtrace() для отслеживания распределений памяти : Майкл Джонсон 7.3. Поиск утечек памяти с помощью mpr : Майкл Джонсон
7.4. Обнаружение ошибок памяти с помощью Valgrind : Майкл Джонсон 7.5. Electric Fence : Майкл Джонсон
7.5.2. Выравнивание памяти : Майкл Джонсон Глава 8 Создание и использование библиотек : Майкл Джонсон
8.2. Совместно используемые библиотеки : Майкл Джонсон 8.3. Разработка совместно используемых библиотек : Майкл Джонсон
8.3.1. Управление совместимостью : Майкл Джонсон 8.4. Сборка совместно используемых библиотек : Майкл Джонсон
8.5. Инсталляция совместно используемых библиотек : Майкл Джонсон продолжение 65 : Майкл Джонсон
8.5.1. Пример : Майкл Джонсон 8.6. Работа с совместно используемыми библиотеками : Майкл Джонсон
Глава 9 Системное окружение Linux : Майкл Джонсон 9.1. Окружение процесса : Майкл Джонсон
9.2. Системные вызовы : Майкл Джонсон продолжение 71 : Майкл Джонсон
9.2.2. Коды возврата системных вызов : Майкл Джонсон 9.2.3. Использование системных вызовов : Майкл Джонсон
9.2.4. Общие коды возврата ошибок : Майкл Джонсон Глава 4 Инструментальные средства разработки : Майкл Джонсон
4.1. Редакторы : Майкл Джонсон продолжение 77 : Майкл Джонсон
4.1.1. Emacs : Майкл Джонсон 4.2. make : Майкл Джонсон
продолжение 80 : Майкл Джонсон 4.2.1 Сложные командные строки : Майкл Джонсон
4.2.2. Переменные : Майкл Джонсон 4.2.3. Суффиксные правила : Майкл Джонсон
4.3. Отладчик GNU : Майкл Джонсон 4.4. Действия при трассировке программы : Майкл Джонсон
продолжение 86 4.1. Редакторы : Майкл Джонсон
4.1.1. Emacs : Майкл Джонсон продолжение 89
4.1.1. Emacs : Майкл Джонсон 4.2. make : Майкл Джонсон
4.2.1 Сложные командные строки : Майкл Джонсон 4.2.2. Переменные : Майкл Джонсон
4.2.3. Суффиксные правила : Майкл Джонсон продолжение 95
4.2.1 Сложные командные строки : Майкл Джонсон 4.2.2. Переменные : Майкл Джонсон
4.2.3. Суффиксные правила : Майкл Джонсон 4.3. Отладчик GNU : Майкл Джонсон
4.4. Действия при трассировке программы : Майкл Джонсон 5.1. Опции gcc : Майкл Джонсон
5.2. Заголовочные файлы : Майкл Джонсон 5.1. Опции gcc : Майкл Джонсон
6.1. Выбор возможностей glibc : Майкл Джонсон 6.2. Интерфейсы POSIX : Майкл Джонсон
6.2.1. Обязательные типы POSIX : Майкл Джонсон 6.2.2. Раскрытие возможностей времени выполнения : Майкл Джонсон
6.2.3. Поиск и настройка базовой системной информации : Майкл Джонсон 6.3. Совместимость : Майкл Джонсон
6.1. Выбор возможностей glibc : Майкл Джонсон 6.2. Интерфейсы POSIX : Майкл Джонсон
6.2.2. Раскрытие возможностей времени выполнения : Майкл Джонсон 6.2.3. Поиск и настройка базовой системной информации : Майкл Джонсон
6.2.1. Обязательные типы POSIX : Майкл Джонсон 6.2.2. Раскрытие возможностей времени выполнения : Майкл Джонсон
6.2.3. Поиск и настройка базовой системной информации : Майкл Джонсон 6.3. Совместимость : Майкл Джонсон
7.1. Код, содержащий ошибки : Майкл Джонсон 7.2. Средства проверки памяти, входящие в состав glibc : Майкл Джонсон
7.2.1. Поиск повреждений кучи : Майкл Джонсон 7.2.2. Использование mtrace() для отслеживания распределений памяти : Майкл Джонсон
7.3. Поиск утечек памяти с помощью mpr : Майкл Джонсон 7.4. Обнаружение ошибок памяти с помощью Valgrind : Майкл Джонсон
7.5. Electric Fence : Майкл Джонсон 7.5.2. Выравнивание памяти : Майкл Джонсон
7.1. Код, содержащий ошибки : Майкл Джонсон 7.2.1. Поиск повреждений кучи : Майкл Джонсон
7.2.2. Использование mtrace() для отслеживания распределений памяти : Майкл Джонсон 7.2.1. Поиск повреждений кучи : Майкл Джонсон
7.2.2. Использование mtrace() для отслеживания распределений памяти : Майкл Джонсон 7.3. Поиск утечек памяти с помощью mpr : Майкл Джонсон
7.4. Обнаружение ошибок памяти с помощью Valgrind : Майкл Джонсон 7.5.2. Выравнивание памяти : Майкл Джонсон
7.5.1. Использование Electric Fence : Майкл Джонсон 7.5.2. Выравнивание памяти : Майкл Джонсон
8.2. Совместно используемые библиотеки : Майкл Джонсон 8.3. Разработка совместно используемых библиотек : Майкл Джонсон
8.3.1. Управление совместимостью : Майкл Джонсон 8.4. Сборка совместно используемых библиотек : Майкл Джонсон
8.5. Инсталляция совместно используемых библиотек : Майкл Джонсон продолжение 141 : Майкл Джонсон
8.5.1. Пример : Майкл Джонсон 8.6. Работа с совместно используемыми библиотеками : Майкл Джонсон
8.2. Совместно используемые библиотеки : Майкл Джонсон 8.3.1. Управление совместимостью : Майкл Джонсон
8.3.1. Управление совместимостью : Майкл Джонсон 8.4. Сборка совместно используемых библиотек : Майкл Джонсон
8.5. Инсталляция совместно используемых библиотек : Майкл Джонсон 8.5.1. Пример : Майкл Джонсон
продолжение 150 8.5.1. Пример : Майкл Джонсон
9.1. Окружение процесса : Майкл Джонсон 9.2. Системные вызовы : Майкл Джонсон
продолжение 154 : Майкл Джонсон 9.2.2. Коды возврата системных вызов : Майкл Джонсон
9.2.3. Использование системных вызовов : Майкл Джонсон 9.2.4. Общие коды возврата ошибок : Майкл Джонсон
9.1. Окружение процесса : Майкл Джонсон 9.2. Системные вызовы : Майкл Джонсон
9.2.2. Коды возврата системных вызов : Майкл Джонсон 9.2.3. Использование системных вызовов : Майкл Джонсон
9.2.4. Общие коды возврата ошибок : Майкл Джонсон продолжение 163
9.2.2. Коды возврата системных вызов : Майкл Джонсон 9.2.3. Использование системных вызовов : Майкл Джонсон
9.2.4. Общие коды возврата ошибок : Майкл Джонсон Часть III Системное программирование : Майкл Джонсон
10.1. Определение процесса : Майкл Джонсон 10.2 Атрибуты процессов : Майкл Джонсон
10.2.1. Идентификатор процесса и происхождение : Майкл Джонсон 10.2.2. Сертификаты : Майкл Джонсон
10.2.4. Резюме по идентификаторам пользователей и групп : Майкл Джонсон 10.3. Информация о процессе : Майкл Джонсон
10.3.1. Аргументы программы : Майкл Джонсон 10.3.2 Использование ресурсов : Майкл Джонсон
10.3.3. Применение ограничений использования ресурсов : Майкл Джонсон 10.4. Примитивы процессов : Майкл Джонсон
10.4.2. Наблюдение за уничтожением дочерних процессов : Майкл Джонсон 10.4.3. Запуск новых программ : Майкл Джонсон
10.4.6. Уничтожение других процессов : Майкл Джонсон 10.5. Простые дочерние процессы : Майкл Джонсон
10.5.2. Чтение и запись из процесса : Майкл Джонсон 10.6. Сеансы и группы процессов : Майкл Джонсон
10.6.3. Группы процессов : Майкл Джонсон 10.6.4. Висячие группы процессов : Майкл Джонсон
10.7. Введение в ladsh : Майкл Джонсон 10.7.1. Запуск внешних программ с помощью ladsh : Майкл Джонсон
10.8. Создание клонов : Майкл Джонсон Глава 11 Простое управление файлами : Майкл Джонсон
продолжение 190 : Майкл Джонсон 11.1. Режим файла : Майкл Джонсон
11.1.1. Права доступа к файлу : Майкл Джонсон 11.1.2. Модификаторы прав доступа к файлам : Майкл Джонсон
11.1.3. Типы файлов : Майкл Джонсон 11.1.4. Маска umask процесса : Майкл Джонсон
11.2. Основные файловые операции : Майкл Джонсон 11.2.1. Файловые дескрипторы : Майкл Джонсон
11.2.3. Открытие файлов в файловой системе : Майкл Джонсон 11.2.4. Чтение, запись и перемещение : Майкл Джонсон
11.2.5. Частичное чтение и запись : Майкл Джонсон 11.2.7. Синхронизация файлов : Майкл Джонсон
11.3. Запрос и изменение информации inode : Майкл Джонсон 11.3.1. Поиск информации inode : Майкл Джонсон
11.3.2. Простой пример stat() : Майкл Джонсон 11.3.7. Расширенные атрибуты Ext3 : Майкл Джонсон
11.4. Манипулирование содержимым каталогов : Майкл Джонсон 11.4.1. Создание входных точек устройств и именованных каналов : Майкл Джонсон
11.4.3. Использование символических ссылок : Майкл Джонсон 11.5. Манипуляции файловыми дескрипторами : Майкл Джонсон
11.5.3. Дублирование файловых дескрипторов : Майкл Джонсон 11.7. Добавление перенаправления для ladsh : Майкл Джонсон
11.7.1. Структуры данных : Майкл Джонсон 11.7.2. Изменения в коде : Майкл Джонсон
Глава 12 Обработка сигналов : Майкл Джонсон продолжение 215 : Майкл Джонсон
12.1. Концепция сигналов : Майкл Джонсон 12.1.2. Простые сигналы : Майкл Джонсон
12.1.3. Надежные сигналы : Майкл Джонсон 12.1.4. Сигналы и системные вызовы : Майкл Джонсон
12.2. Программный интерфейс сигналов Linux и POSIX : Майкл Джонсон 12.2.3. Перехват сигналов : Майкл Джонсон
12.2.4. Манипулирование маской сигналов процесса : Майкл Джонсон 12.3. Доступные сигналы : Майкл Джонсон
продолжение 224 : Майкл Джонсон 12.4. Написание обработчиков сигналов : Майкл Джонсон
12.5. Повторное открытие журнальных файлов : Майкл Джонсон 12.6. Сигналы реального времени : Майкл Джонсон
12.6.1. Очередность и порядок сигналов : Майкл Джонсон 12.7. Дополнительные сведения о сигналах : Майкл Джонсон
12.7.1. Получение контекста сигнала : Майкл Джонсон 12.7.2. Отправка данных с сигналом : Майкл Джонсон
Глава 13 Расширенная обработка файлов : Майкл Джонсон 13.1. Мультиплексирование входных и выходных данных : Майкл Джонсон
продолжение 234 : Майкл Джонсон 13.1.1. Неблокируемый ввод-вывод : Майкл Джонсон
13.1.2. Мультиплексирование с помощью poll() : Майкл Джонсон 13.1.3. Мультиплексирование с помощью select() : Майкл Джонсон
13.1.4. Сравнение poll() и select() : Майкл Джонсон 13.1.5. Мультиплексирование с помощью epoll : Майкл Джонсон
13.1.6 Сравнение poll() и epoll : Майкл Джонсон 13.2. Отображение в памяти : Майкл Джонсон
13.2.2. Установка отображения в памяти : Майкл Джонсон 13.2.4. Синхронизация областей памяти на диск : Майкл Джонсон
13.2.5. Блокировка областей памяти : Майкл Джонсон 13.3. Блокирование файлов : Майкл Джонсон
13.3.1. Блокировочные файлы : Майкл Джонсон 13.3.2. Блокировка записей : Майкл Джонсон
13.3.4. Аренда файла : Майкл Джонсон 13.4. Альтернативы read() и write() : Майкл Джонсон
13.4.1. Разбросанное/сборное чтение и запись : Майкл Джонсон 13.4.2. Игнорирование указателя файла : Майкл Джонсон
Глава 14 Операции с каталогами : Майкл Джонсон 14.1. Текущий рабочий каталог : Майкл Джонсон
14.1.1. Поиск текущего рабочего каталога : Майкл Джонсон 14.4. Чтение содержимого каталога : Майкл Джонсон
продолжение 256 : Майкл Джонсон 14.5. Универсализация файловых имен : Майкл Джонсон
14.5.2. Внутренняя универсализация : Майкл Джонсон 14.6. Добавление к ladsh возможностей работы с каталогами и универсализацией : Майкл Джонсон
14.6.2. Добавление универсализации файловых имен : Майкл Джонсон 14.7. Обход деревьев файловых систем : Майкл Джонсон
14.7.1. Использование ftw() : Майкл Джонсон 14.7.2. Обход дерева файлов с помощью nft() : Майкл Джонсон
14.7.3. Реализация find : Майкл Джонсон 14.8. Уведомление о смене каталога : Майкл Джонсон
Глава 15 Управление заданиями : Майкл Джонсон 15.1. Основы управления заданиями : Майкл Джонсон
15.1.3. Обработка сигналов управления заданиями : Майкл Джонсон 15.2. Управление заданиями в ladsh : Майкл Джонсон
Глава 16 Терминалы и псевдотерминалы : Майкл Джонсон продолжение 271 : Майкл Джонсон
16.1. Операции tty : Майкл Джонсон 16.1.2. Управляющие терминалы : Майкл Джонсон
16.1.4. Запись с помощью utempter : Майкл Джонсон 16.1.5. Запись вручную : Майкл Джонсон
16.2. Обзор termios : Майкл Джонсон 16.3. Примеры использования termios : Майкл Джонсон
16.3.1. Пароли : Майкл Джонсон 16.3.2. Последовательные коммуникации : Майкл Джонсон
16.4. Отладка termios : Майкл Джонсон 16.5. Справочник по termios : Майкл Джонсон
16.5.1. Функции : Майкл Джонсон 16.5.4. Флаги режима ввода : Майкл Джонсон
16.5.5. Флаги режима вывода : Майкл Джонсон 16.5.6. Управляющие флаги : Майкл Джонсон
16.5.7. Управляющие символы : Майкл Джонсон 16.5.8. Локальные флаги : Майкл Джонсон
16.5.9. Управление read() : Майкл Джонсон 16.6. Псевдотерминалы : Майкл Джонсон
16.6.1. Открытие псевдотерминалов : Майкл Джонсон 16.6.2. Простые способы открытия псевдотерминалов : Майкл Джонсон
16.6.3. Сложные способы открытия псевдотерминалов : Майкл Джонсон 16.6.4. Примеры псевдотерминалов : Майкл Джонсон
Глава 17 Работа в сети с помощью сокетов : Майкл Джонсон 17.1. Поддержка протоколов : Майкл Джонсон
17.1.3. Как заставить реальность играть по точным правилам? : Майкл Джонсон 17.1.4. Адреса : Майкл Джонсон
17.3. Основные действия с сокетами : Майкл Джонсон 17.3.1. Создание сокета : Майкл Джонсон
17.3.4. Ожидание соединений : Майкл Джонсон 17.4. Сокеты домена Unix : Майкл Джонсон
17.4.2. Ожидание соединения : Майкл Джонсон 17.4.6. Передача файловых дескрипторов : Майкл Джонсон
17.5. Сетевая обработка с помощью TCP/IP : Майкл Джонсон 17.5.1. Упорядочение байтов : Майкл Джонсон
17.5.2. Адресация IPv4 : Майкл Джонсон 17.5.3. Адресация IPv6 : Майкл Джонсон
17.5.4. Манипулирование IP-адресами : Майкл Джонсон 17.5.5. Преобразование имен в адреса : Майкл Джонсон
17.5.6. Преобразование адресов в имена : Майкл Джонсон 17.5.7. Ожидание TCP-соединений : Майкл Джонсон
17.5.8. Клиентские приложения TCP : Майкл Джонсон 17.6. Использование дейтаграмм UDP : Майкл Джонсон
продолжение 314 : Майкл Джонсон 17.6.1. Создание UDP-сокета : Майкл Джонсон
17.6.2. Отправка и получение дейтаграмм : Майкл Джонсон 17.6.3. Простой tftp-сервер : Майкл Джонсон
17.7. Ошибки сокетов : Майкл Джонсон 17.8. Унаследованные сетевые функции : Майкл Джонсон
17.8.1. Манипулирование IPv4-адресами : Майкл Джонсон 17.8.2. Преобразование имен хостов : Майкл Джонсон
17.8.3. Пример поиска информации хоста с использованием унаследованных функций : Майкл Джонсон 17.8.4. Поиск номеров портов : Майкл Джонсон
Глава 18 Время : Майкл Джонсон 18.1. Вывод времени и даты : Майкл Джонсон
18.1.1. Представление времени : Майкл Джонсон 18.1.2. Преобразование, форматирование и разбор значений времени : Майкл Джонсон
18.1.3. Ограничения, связанные со временем : Майкл Джонсон 18.2. Использование таймеров : Майкл Джонсон
18.2.1. Режим ожидания : Майкл Джонсон 18.2.2. Интервальные таймеры : Майкл Джонсон
Глава 19 Случайные числа : Майкл Джонсон 19.1. Псевдослучайные числа : Майкл Джонсон
19.2. Криптография и случайные числа : Майкл Джонсон Глава 20 Программирование виртуальных консолей : Майкл Джонсон
продолжение 336 : Майкл Джонсон 20.1. Начало работы : Майкл Джонсон
20.5. Управление переключением виртуальных консолей : Майкл Джонсон 20.6. Пример команды open : Майкл Джонсон
Глава 21 Консоль Linux : Майкл Джонсон продолжение 341 : Майкл Джонсон
21.1. Базы данных возможностей : Майкл Джонсон 21.3. Возможности консоли Linux : Майкл Джонсон
продолжение 344 : Майкл Джонсон 21.3.1. Управляющие символы : Майкл Джонсон
21.3.2. Управляющие последовательности : Майкл Джонсон 21.3.4. Составные управляющие последовательности : Майкл Джонсон
21.4. Прямой вывод на экран : Майкл Джонсон Глава 22 Написание защищенных программ : Майкл Джонсон
22.1. Когда безопасность имеет значение? : Майкл Джонсон продолжение 351 : Майкл Джонсон
22.1.1. Когда выходит из строя система безопасности? : Майкл Джонсон 22.2. Минимизация возможности появления атак : Майкл Джонсон
22.2.1. Передача полномочий : Майкл Джонсон 22.2.2. Получение вспомогательной программы : Майкл Джонсон
22.3. Общие бреши системы безопасности : Майкл Джонсон 22.3.1. Переполнение буфера : Майкл Джонсон
22.3.3. Переменные окружения : Майкл Джонсон 22.3.5. Создание временных файлов : Майкл Джонсон
22.3.6. Режимы состязаний и обработчики сигналов : Майкл Джонсон 22.4. Запуск в качестве демона : Майкл Джонсон
10.1. Определение процесса : Майкл Джонсон 10.2 Атрибуты процессов : Майкл Джонсон
10.2.1. Идентификатор процесса и происхождение : Майкл Джонсон 10.2.2. Сертификаты : Майкл Джонсон
10.2.4. Резюме по идентификаторам пользователей и групп : Майкл Джонсон 10.3. Информация о процессе : Майкл Джонсон
10.3.1. Аргументы программы : Майкл Джонсон 10.3.2 Использование ресурсов : Майкл Джонсон
10.3.3. Применение ограничений использования ресурсов : Майкл Джонсон 10.4. Примитивы процессов : Майкл Джонсон
10.4.2. Наблюдение за уничтожением дочерних процессов : Майкл Джонсон 10.4.3. Запуск новых программ : Майкл Джонсон
10.4.6. Уничтожение других процессов : Майкл Джонсон 10.5. Простые дочерние процессы : Майкл Джонсон
10.5.2. Чтение и запись из процесса : Майкл Джонсон 10.6. Сеансы и группы процессов : Майкл Джонсон
10.6.3. Группы процессов : Майкл Джонсон 10.6.4. Висячие группы процессов : Майкл Джонсон
10.7. Введение в ladsh : Майкл Джонсон 10.7.1. Запуск внешних программ с помощью ladsh : Майкл Джонсон
10.8. Создание клонов : Майкл Джонсон 10.2 Атрибуты процессов : Майкл Джонсон
10.2.2. Сертификаты : Майкл Джонсон 10.2.4. Резюме по идентификаторам пользователей и групп : Майкл Джонсон
10.2.1. Идентификатор процесса и происхождение : Майкл Джонсон 10.2.2. Сертификаты : Майкл Джонсон
10.2.4. Резюме по идентификаторам пользователей и групп : Майкл Джонсон 10.3.1. Аргументы программы : Майкл Джонсон
10.3.2 Использование ресурсов : Майкл Джонсон 10.3.3. Применение ограничений использования ресурсов : Майкл Джонсон
10.3.1. Аргументы программы : Майкл Джонсон 10.3.2 Использование ресурсов : Майкл Джонсон
10.3.3. Применение ограничений использования ресурсов : Майкл Джонсон 10.4.2. Наблюдение за уничтожением дочерних процессов : Майкл Джонсон
10.4.3. Запуск новых программ : Майкл Джонсон 10.4.6. Уничтожение других процессов : Майкл Джонсон
10.4.2. Наблюдение за уничтожением дочерних процессов : Майкл Джонсон 10.4.3. Запуск новых программ : Майкл Джонсон
10.4.6. Уничтожение других процессов : Майкл Джонсон 10.5.2. Чтение и запись из процесса : Майкл Джонсон
10.5.2. Чтение и запись из процесса : Майкл Джонсон 10.6.3. Группы процессов : Майкл Джонсон
10.6.4. Висячие группы процессов : Майкл Джонсон 10.6.3. Группы процессов : Майкл Джонсон
10.6.4. Висячие группы процессов : Майкл Джонсон 10.7.1. Запуск внешних программ с помощью ladsh : Майкл Джонсон
10.7.1. Запуск внешних программ с помощью ladsh : Майкл Джонсон 10.8. Создание клонов : Майкл Джонсон
Глава 11 Простое управление файлами : Майкл Джонсон 11.1. Режим файла : Майкл Джонсон
11.1.1. Права доступа к файлу : Майкл Джонсон 11.1.2. Модификаторы прав доступа к файлам : Майкл Джонсон
11.1.3. Типы файлов : Майкл Джонсон 11.1.4. Маска umask процесса : Майкл Джонсон
11.2. Основные файловые операции : Майкл Джонсон 11.2.1. Файловые дескрипторы : Майкл Джонсон
11.2.3. Открытие файлов в файловой системе : Майкл Джонсон 11.2.4. Чтение, запись и перемещение : Майкл Джонсон
11.2.5. Частичное чтение и запись : Майкл Джонсон 11.2.7. Синхронизация файлов : Майкл Джонсон
11.3. Запрос и изменение информации inode : Майкл Джонсон 11.3.1. Поиск информации inode : Майкл Джонсон
11.3.2. Простой пример stat() : Майкл Джонсон 11.3.7. Расширенные атрибуты Ext3 : Майкл Джонсон
11.4. Манипулирование содержимым каталогов : Майкл Джонсон 11.4.1. Создание входных точек устройств и именованных каналов : Майкл Джонсон
11.4.3. Использование символических ссылок : Майкл Джонсон 11.5. Манипуляции файловыми дескрипторами : Майкл Джонсон
11.5.3. Дублирование файловых дескрипторов : Майкл Джонсон 11.7. Добавление перенаправления для ladsh : Майкл Джонсон
11.7.1. Структуры данных : Майкл Джонсон 11.7.2. Изменения в коде : Майкл Джонсон
продолжение 434 11.1.1. Права доступа к файлу : Майкл Джонсон
11.1.2. Модификаторы прав доступа к файлам : Майкл Джонсон 11.1.3. Типы файлов : Майкл Джонсон
11.1.4. Маска umask процесса : Майкл Джонсон 11.1.1. Права доступа к файлу : Майкл Джонсон
11.1.2. Модификаторы прав доступа к файлам : Майкл Джонсон 11.1.3. Типы файлов : Майкл Джонсон
11.1.4. Маска umask процесса : Майкл Джонсон 11.2.1. Файловые дескрипторы : Майкл Джонсон
11.2.3. Открытие файлов в файловой системе : Майкл Джонсон 11.2.4. Чтение, запись и перемещение : Майкл Джонсон
11.2.5. Частичное чтение и запись : Майкл Джонсон 11.2.7. Синхронизация файлов : Майкл Джонсон
11.2.1. Файловые дескрипторы : Майкл Джонсон 11.2.3. Открытие файлов в файловой системе : Майкл Джонсон
11.2.4. Чтение, запись и перемещение : Майкл Джонсон 11.2.5. Частичное чтение и запись : Майкл Джонсон
11.2.7. Синхронизация файлов : Майкл Джонсон 11.3. Запрос и изменение информации inode : Майкл Джонсон
11.3.2. Простой пример stat() : Майкл Джонсон 11.3.7. Расширенные атрибуты Ext3 : Майкл Джонсон
11.3.1. Поиск информации inode : Майкл Джонсон 11.3.2. Простой пример stat() : Майкл Джонсон
11.3.7. Расширенные атрибуты Ext3 : Майкл Джонсон 11.4.1. Создание входных точек устройств и именованных каналов : Майкл Джонсон
11.4.3. Использование символических ссылок : Майкл Джонсон 11.4.1. Создание входных точек устройств и именованных каналов : Майкл Джонсон
11.4.3. Использование символических ссылок : Майкл Джонсон 11.5.3. Дублирование файловых дескрипторов : Майкл Джонсон
11.5.3. Дублирование файловых дескрипторов : Майкл Джонсон 11.7.1. Структуры данных : Майкл Джонсон
11.7.2. Изменения в коде : Майкл Джонсон 11.7.1. Структуры данных : Майкл Джонсон
11.7.2. Изменения в коде : Майкл Джонсон Глава 12 Обработка сигналов : Майкл Джонсон
12.1. Концепция сигналов : Майкл Джонсон 12.1.2. Простые сигналы : Майкл Джонсон
12.1.3. Надежные сигналы : Майкл Джонсон 12.1.4. Сигналы и системные вызовы : Майкл Джонсон
12.2. Программный интерфейс сигналов Linux и POSIX : Майкл Джонсон 12.2.3. Перехват сигналов : Майкл Джонсон
12.2.4. Манипулирование маской сигналов процесса : Майкл Джонсон 12.3. Доступные сигналы : Майкл Джонсон
продолжение 478 : Майкл Джонсон 12.4. Написание обработчиков сигналов : Майкл Джонсон
12.5. Повторное открытие журнальных файлов : Майкл Джонсон 12.6. Сигналы реального времени : Майкл Джонсон
12.6.1. Очередность и порядок сигналов : Майкл Джонсон 12.7. Дополнительные сведения о сигналах : Майкл Джонсон
12.7.1. Получение контекста сигнала : Майкл Джонсон 12.7.2. Отправка данных с сигналом : Майкл Джонсон
продолжение 486 12.1.2. Простые сигналы : Майкл Джонсон
12.1.3. Надежные сигналы : Майкл Джонсон 12.1.4. Сигналы и системные вызовы : Майкл Джонсон
12.1.2. Простые сигналы : Майкл Джонсон 12.1.3. Надежные сигналы : Майкл Джонсон
12.1.4. Сигналы и системные вызовы : Майкл Джонсон 12.2.3. Перехват сигналов : Майкл Джонсон
12.2.4. Манипулирование маской сигналов процесса : Майкл Джонсон 12.2.3. Перехват сигналов : Майкл Джонсон
12.2.4. Манипулирование маской сигналов процесса : Майкл Джонсон 12.3. Доступные сигналы : Майкл Джонсон
продолжение 498 12.4. Написание обработчиков сигналов : Майкл Джонсон
12.5. Повторное открытие журнальных файлов : Майкл Джонсон 12.6.1. Очередность и порядок сигналов : Майкл Джонсон
12.6.1. Очередность и порядок сигналов : Майкл Джонсон 12.7.1. Получение контекста сигнала : Майкл Джонсон
12.7.2. Отправка данных с сигналом : Майкл Джонсон 12.7.1. Получение контекста сигнала : Майкл Джонсон
12.7.2. Отправка данных с сигналом : Майкл Джонсон 13.1. Мультиплексирование входных и выходных данных : Майкл Джонсон
продолжение 508 : Майкл Джонсон 13.1.1. Неблокируемый ввод-вывод : Майкл Джонсон
13.1.2. Мультиплексирование с помощью poll() : Майкл Джонсон 13.1.3. Мультиплексирование с помощью select() : Майкл Джонсон
13.1.4. Сравнение poll() и select() : Майкл Джонсон 13.1.5. Мультиплексирование с помощью epoll : Майкл Джонсон
13.1.6 Сравнение poll() и epoll : Майкл Джонсон 13.2. Отображение в памяти : Майкл Джонсон
13.2.2. Установка отображения в памяти : Майкл Джонсон 13.2.4. Синхронизация областей памяти на диск : Майкл Джонсон
13.2.5. Блокировка областей памяти : Майкл Джонсон 13.3. Блокирование файлов : Майкл Джонсон
13.3.1. Блокировочные файлы : Майкл Джонсон 13.3.2. Блокировка записей : Майкл Джонсон
13.3.4. Аренда файла : Майкл Джонсон 13.4. Альтернативы read() и write() : Майкл Джонсон
13.4.1. Разбросанное/сборное чтение и запись : Майкл Джонсон 13.4.2. Игнорирование указателя файла : Майкл Джонсон
13.1. Мультиплексирование входных и выходных данных : Майкл Джонсон 13.1.1. Неблокируемый ввод-вывод : Майкл Джонсон
13.1.2. Мультиплексирование с помощью poll() : Майкл Джонсон 13.1.3. Мультиплексирование с помощью select() : Майкл Джонсон
13.1.4. Сравнение poll() и select() : Майкл Джонсон 13.1.5. Мультиплексирование с помощью epoll : Майкл Джонсон
13.1.6 Сравнение poll() и epoll : Майкл Джонсон продолжение 533
13.1.1. Неблокируемый ввод-вывод : Майкл Джонсон 13.1.2. Мультиплексирование с помощью poll() : Майкл Джонсон
13.1.3. Мультиплексирование с помощью select() : Майкл Джонсон 13.1.4. Сравнение poll() и select() : Майкл Джонсон
13.1.5. Мультиплексирование с помощью epoll : Майкл Джонсон 13.1.6 Сравнение poll() и epoll : Майкл Джонсон
13.2.2. Установка отображения в памяти : Майкл Джонсон 13.2.4. Синхронизация областей памяти на диск : Майкл Джонсон
13.2.5. Блокировка областей памяти : Майкл Джонсон 13.2.2. Установка отображения в памяти : Майкл Джонсон
13.2.4. Синхронизация областей памяти на диск : Майкл Джонсон 13.2.5. Блокировка областей памяти : Майкл Джонсон
13.3.1. Блокировочные файлы : Майкл Джонсон 13.3.2. Блокировка записей : Майкл Джонсон
13.3.4. Аренда файла : Майкл Джонсон 13.3.1. Блокировочные файлы : Майкл Джонсон
13.3.2. Блокировка записей : Майкл Джонсон 13.3.4. Аренда файла : Майкл Джонсон
13.4.1. Разбросанное/сборное чтение и запись : Майкл Джонсон 13.4.2. Игнорирование указателя файла : Майкл Джонсон
13.4.1. Разбросанное/сборное чтение и запись : Майкл Джонсон 13.4.2. Игнорирование указателя файла : Майкл Джонсон
14.1. Текущий рабочий каталог : Майкл Джонсон 14.1.1. Поиск текущего рабочего каталога : Майкл Джонсон
14.4. Чтение содержимого каталога : Майкл Джонсон продолжение 559 : Майкл Джонсон
14.5. Универсализация файловых имен : Майкл Джонсон 14.5.2. Внутренняя универсализация : Майкл Джонсон
14.6. Добавление к ladsh возможностей работы с каталогами и универсализацией : Майкл Джонсон 14.6.2. Добавление универсализации файловых имен : Майкл Джонсон
14.7. Обход деревьев файловых систем : Майкл Джонсон 14.7.1. Использование ftw() : Майкл Джонсон
14.7.2. Обход дерева файлов с помощью nft() : Майкл Джонсон 14.7.3. Реализация find : Майкл Джонсон
14.8. Уведомление о смене каталога : Майкл Джонсон 14.1. Текущий рабочий каталог : Майкл Джонсон
14.1.1. Поиск текущего рабочего каталога : Майкл Джонсон 14.4. Чтение содержимого каталога : Майкл Джонсон
продолжение 572 14.5.2. Внутренняя универсализация : Майкл Джонсон
14.5.2. Внутренняя универсализация : Майкл Джонсон 14.6.2. Добавление универсализации файловых имен : Майкл Джонсон
14.6.2. Добавление универсализации файловых имен : Майкл Джонсон 14.7.1. Использование ftw() : Майкл Джонсон
14.7.2. Обход дерева файлов с помощью nft() : Майкл Джонсон 14.7.3. Реализация find : Майкл Джонсон
14.7.1. Использование ftw() : Майкл Джонсон 14.7.2. Обход дерева файлов с помощью nft() : Майкл Джонсон
14.7.3. Реализация find : Майкл Джонсон 14.8. Уведомление о смене каталога : Майкл Джонсон
15.1. Основы управления заданиями : Майкл Джонсон 15.1.3. Обработка сигналов управления заданиями : Майкл Джонсон
15.2. Управление заданиями в ladsh : Майкл Джонсон 15.1.3. Обработка сигналов управления заданиями : Майкл Джонсон
15.1.3. Обработка сигналов управления заданиями : Майкл Джонсон 15.2. Управление заданиями в ladsh : Майкл Джонсон
Глава 16 Терминалы и псевдотерминалы : Майкл Джонсон 16.1. Операции tty : Майкл Джонсон
16.1.2. Управляющие терминалы : Майкл Джонсон 16.1.4. Запись с помощью utempter : Майкл Джонсон
16.1.5. Запись вручную : Майкл Джонсон 16.2. Обзор termios : Майкл Джонсон
16.3. Примеры использования termios : Майкл Джонсон 16.3.1. Пароли : Майкл Джонсон
16.3.2. Последовательные коммуникации : Майкл Джонсон 16.4. Отладка termios : Майкл Джонсон
16.5. Справочник по termios : Майкл Джонсон 16.5.1. Функции : Майкл Джонсон
16.5.4. Флаги режима ввода : Майкл Джонсон 16.5.5. Флаги режима вывода : Майкл Джонсон
16.5.6. Управляющие флаги : Майкл Джонсон 16.5.7. Управляющие символы : Майкл Джонсон
16.5.8. Локальные флаги : Майкл Джонсон 16.5.9. Управление read() : Майкл Джонсон
16.6. Псевдотерминалы : Майкл Джонсон 16.6.1. Открытие псевдотерминалов : Майкл Джонсон
16.6.2. Простые способы открытия псевдотерминалов : Майкл Джонсон 16.6.3. Сложные способы открытия псевдотерминалов : Майкл Джонсон
16.6.4. Примеры псевдотерминалов : Майкл Джонсон продолжение 613
16.1.2. Управляющие терминалы : Майкл Джонсон 16.1.4. Запись с помощью utempter : Майкл Джонсон
16.1.5. Запись вручную : Майкл Джонсон 16.1.2. Управляющие терминалы : Майкл Джонсон
16.1.4. Запись с помощью utempter : Майкл Джонсон 16.1.5. Запись вручную : Майкл Джонсон
16.2. Обзор termios : Майкл Джонсон 16.3. Примеры использования termios : Майкл Джонсон
16.3.2. Последовательные коммуникации : Майкл Джонсон 16.3.1. Пароли : Майкл Джонсон
16.3.2. Последовательные коммуникации : Майкл Джонсон 16.4. Отладка termios : Майкл Джонсон
16.5.1. Функции : Майкл Джонсон 16.5.4. Флаги режима ввода : Майкл Джонсон
16.5.5. Флаги режима вывода : Майкл Джонсон 16.5.6. Управляющие флаги : Майкл Джонсон
16.5.7. Управляющие символы : Майкл Джонсон 16.5.8. Локальные флаги : Майкл Джонсон
16.5.9. Управление read() : Майкл Джонсон 16.5.1. Функции : Майкл Джонсон
16.5.4. Флаги режима ввода : Майкл Джонсон 16.5.5. Флаги режима вывода : Майкл Джонсон
16.5.6. Управляющие флаги : Майкл Джонсон 16.5.7. Управляющие символы : Майкл Джонсон
16.5.8. Локальные флаги : Майкл Джонсон 16.5.9. Управление read() : Майкл Джонсон
16.6.1. Открытие псевдотерминалов : Майкл Джонсон 16.6.2. Простые способы открытия псевдотерминалов : Майкл Джонсон
16.6.3. Сложные способы открытия псевдотерминалов : Майкл Джонсон 16.6.4. Примеры псевдотерминалов : Майкл Джонсон
16.6.1. Открытие псевдотерминалов : Майкл Джонсон 16.6.2. Простые способы открытия псевдотерминалов : Майкл Джонсон
16.6.3. Сложные способы открытия псевдотерминалов : Майкл Джонсон 16.6.4. Примеры псевдотерминалов : Майкл Джонсон
17.1. Поддержка протоколов : Майкл Джонсон 17.1.3. Как заставить реальность играть по точным правилам? : Майкл Джонсон
17.1.4. Адреса : Майкл Джонсон 17.3. Основные действия с сокетами : Майкл Джонсон
17.3.1. Создание сокета : Майкл Джонсон 17.3.4. Ожидание соединений : Майкл Джонсон
17.4. Сокеты домена Unix : Майкл Джонсон 17.4.2. Ожидание соединения : Майкл Джонсон
17.4.6. Передача файловых дескрипторов : Майкл Джонсон 17.5. Сетевая обработка с помощью TCP/IP : Майкл Джонсон
17.5.1. Упорядочение байтов : Майкл Джонсон 17.5.2. Адресация IPv4 : Майкл Джонсон
17.5.3. Адресация IPv6 : Майкл Джонсон 17.5.4. Манипулирование IP-адресами : Майкл Джонсон
17.5.5. Преобразование имен в адреса : Майкл Джонсон 17.5.6. Преобразование адресов в имена : Майкл Джонсон
17.5.7. Ожидание TCP-соединений : Майкл Джонсон 17.5.8. Клиентские приложения TCP : Майкл Джонсон
17.6. Использование дейтаграмм UDP : Майкл Джонсон продолжение 667 : Майкл Джонсон
17.6.1. Создание UDP-сокета : Майкл Джонсон 17.6.2. Отправка и получение дейтаграмм : Майкл Джонсон
17.6.3. Простой tftp-сервер : Майкл Джонсон 17.7. Ошибки сокетов : Майкл Джонсон
17.8. Унаследованные сетевые функции : Майкл Джонсон 17.8.1. Манипулирование IPv4-адресами : Майкл Джонсон
17.8.2. Преобразование имен хостов : Майкл Джонсон 17.8.3. Пример поиска информации хоста с использованием унаследованных функций : Майкл Джонсон
17.8.4. Поиск номеров портов : Майкл Джонсон 17.1.3. Как заставить реальность играть по точным правилам? : Майкл Джонсон
17.1.4. Адреса : Майкл Джонсон 17.1.3. Как заставить реальность играть по точным правилам? : Майкл Джонсон
17.1.4. Адреса : Майкл Джонсон 17.3.1. Создание сокета : Майкл Джонсон
17.3.4. Ожидание соединений : Майкл Джонсон 17.3.1. Создание сокета : Майкл Джонсон
17.3.4. Ожидание соединений : Майкл Джонсон 17.4.2. Ожидание соединения : Майкл Джонсон
17.4.6. Передача файловых дескрипторов : Майкл Джонсон продолжение 687
17.4.2. Ожидание соединения : Майкл Джонсон 17.4.6. Передача файловых дескрипторов : Майкл Джонсон
17.5.1. Упорядочение байтов : Майкл Джонсон 17.5.2. Адресация IPv4 : Майкл Джонсон
17.5.3. Адресация IPv6 : Майкл Джонсон 17.5.4. Манипулирование IP-адресами : Майкл Джонсон
17.5.5. Преобразование имен в адреса : Майкл Джонсон 17.5.6. Преобразование адресов в имена : Майкл Джонсон
17.5.7. Ожидание TCP-соединений : Майкл Джонсон 17.5.8. Клиентские приложения TCP : Майкл Джонсон
17.5.1. Упорядочение байтов : Майкл Джонсон 17.5.2. Адресация IPv4 : Майкл Джонсон
17.5.3. Адресация IPv6 : Майкл Джонсон 17.5.4. Манипулирование IP-адресами : Майкл Джонсон
17.5.5. Преобразование имен в адреса : Майкл Джонсон 17.5.6. Преобразование адресов в имена : Майкл Джонсон
17.5.7. Ожидание TCP-соединений : Майкл Джонсон 17.5.8. Клиентские приложения TCP : Майкл Джонсон
17.6. Использование дейтаграмм UDP : Майкл Джонсон 17.6.1. Создание UDP-сокета : Майкл Джонсон
17.6.2. Отправка и получение дейтаграмм : Майкл Джонсон 17.6.3. Простой tftp-сервер : Майкл Джонсон
продолжение 710 17.6.1. Создание UDP-сокета : Майкл Джонсон
17.6.2. Отправка и получение дейтаграмм : Майкл Джонсон 17.6.3. Простой tftp-сервер : Майкл Джонсон
17.7. Ошибки сокетов : Майкл Джонсон 17.8.1. Манипулирование IPv4-адресами : Майкл Джонсон
17.8.2. Преобразование имен хостов : Майкл Джонсон 17.8.3. Пример поиска информации хоста с использованием унаследованных функций : Майкл Джонсон
17.8.4. Поиск номеров портов : Майкл Джонсон 17.8.1. Манипулирование IPv4-адресами : Майкл Джонсон
17.8.2. Преобразование имен хостов : Майкл Джонсон 17.8.3. Пример поиска информации хоста с использованием унаследованных функций : Майкл Джонсон
17.8.4. Поиск номеров портов : Майкл Джонсон Глава 18 Время : Майкл Джонсон
18.1.1. Представление времени : Майкл Джонсон 18.1.2. Преобразование, форматирование и разбор значений времени : Майкл Джонсон
18.1.3. Ограничения, связанные со временем : Майкл Джонсон 18.2. Использование таймеров : Майкл Джонсон
18.2.1. Режим ожидания : Майкл Джонсон 18.2.2. Интервальные таймеры : Майкл Джонсон
18.1. Вывод времени и даты : Майкл Джонсон 18.1.2. Преобразование, форматирование и разбор значений времени : Майкл Джонсон
18.1.3. Ограничения, связанные со временем : Майкл Джонсон 18.1.1. Представление времени : Майкл Джонсон
18.1.2. Преобразование, форматирование и разбор значений времени : Майкл Джонсон 18.1.3. Ограничения, связанные со временем : Майкл Джонсон
18.2.1. Режим ожидания : Майкл Джонсон 18.2.2. Интервальные таймеры : Майкл Джонсон
18.2.1. Режим ожидания : Майкл Джонсон 18.2.2. Интервальные таймеры : Майкл Джонсон
19.1. Псевдослучайные числа : Майкл Джонсон 19.2. Криптография и случайные числа : Майкл Джонсон
19.1. Псевдослучайные числа : Майкл Джонсон 19.2. Криптография и случайные числа : Майкл Джонсон
Глава 20 Программирование виртуальных консолей : Майкл Джонсон 20.1. Начало работы : Майкл Джонсон
20.5. Управление переключением виртуальных консолей : Майкл Джонсон 20.6. Пример команды open : Майкл Джонсон
продолжение 748 20.1. Начало работы : Майкл Джонсон
20.5. Управление переключением виртуальных консолей : Майкл Джонсон 20.6. Пример команды open : Майкл Джонсон
Глава 21 Консоль Linux : Майкл Джонсон 21.1. Базы данных возможностей : Майкл Джонсон
21.3. Возможности консоли Linux : Майкл Джонсон продолжение 755 : Майкл Джонсон
21.3.1. Управляющие символы : Майкл Джонсон 21.3.2. Управляющие последовательности : Майкл Джонсон
21.3.4. Составные управляющие последовательности : Майкл Джонсон 21.4. Прямой вывод на экран : Майкл Джонсон
продолжение 760 21.1. Базы данных возможностей : Майкл Джонсон
21.3. Возможности консоли Linux : Майкл Джонсон 21.3.1. Управляющие символы : Майкл Джонсон
21.3.2. Управляющие последовательности : Майкл Джонсон 21.3.4. Составные управляющие последовательности : Майкл Джонсон
продолжение 766 21.3.1. Управляющие символы : Майкл Джонсон
21.3.2. Управляющие последовательности : Майкл Джонсон 21.3.4. Составные управляющие последовательности : Майкл Джонсон
21.4. Прямой вывод на экран : Майкл Джонсон 22.1. Когда безопасность имеет значение? : Майкл Джонсон
продолжение 772 : Майкл Джонсон 22.1.1. Когда выходит из строя система безопасности? : Майкл Джонсон
22.2. Минимизация возможности появления атак : Майкл Джонсон 22.2.1. Передача полномочий : Майкл Джонсон
22.2.2. Получение вспомогательной программы : Майкл Джонсон 22.3. Общие бреши системы безопасности : Майкл Джонсон
22.3.1. Переполнение буфера : Майкл Джонсон 22.3.3. Переменные окружения : Майкл Джонсон
22.3.5. Создание временных файлов : Майкл Джонсон 22.3.6. Режимы состязаний и обработчики сигналов : Майкл Джонсон
22.4. Запуск в качестве демона : Майкл Джонсон 22.1. Когда безопасность имеет значение? : Майкл Джонсон
22.1.1. Когда выходит из строя система безопасности? : Майкл Джонсон продолжение 785
22.1.1. Когда выходит из строя система безопасности? : Майкл Джонсон 22.2.1. Передача полномочий : Майкл Джонсон
22.2.2. Получение вспомогательной программы : Майкл Джонсон 22.2.1. Передача полномочий : Майкл Джонсон
22.2.2. Получение вспомогательной программы : Майкл Джонсон 22.3.1. Переполнение буфера : Майкл Джонсон
22.3.3. Переменные окружения : Майкл Джонсон 22.3.5. Создание временных файлов : Майкл Джонсон
22.3.6. Режимы состязаний и обработчики сигналов : Майкл Джонсон 22.3.1. Переполнение буфера : Майкл Джонсон
22.3.3. Переменные окружения : Майкл Джонсон 22.3.5. Создание временных файлов : Майкл Джонсон
22.3.6. Режимы состязаний и обработчики сигналов : Майкл Джонсон 22.4. Запуск в качестве демона : Майкл Джонсон
Часть IV Библиотеки для разработки : Майкл Джонсон 23.1. Универсализация произвольных строк : Майкл Джонсон
23.2. Регулярные выражения : Майкл Джонсон 23.2.2. Сопоставление с регулярными выражениями : Майкл Джонсон
23.2.3. Простая утилита grep : Майкл Джонсон Глава 24 Управление терминалами с помощью библиотеки S-Lang : Майкл Джонсон
24.1. Обработка ввода : Майкл Джонсон 24.1.1. Инициализация обработки ввода в S-Lang : Майкл Джонсон
24.2. Обработка вывода : Майкл Джонсон 24.2.6. Переключение наборов символов : Майкл Джонсон
24.2.7. Запись на экран : Майкл Джонсон 24.2.8. Рисование линий и прямоугольников : Майкл Джонсон
24.2.9. Использование цвета : Майкл Джонсон Глава 25 Библиотека хешированных баз данных : Майкл Джонсон
25.1. Обзор : Майкл Джонсон 25.2. Основные операции : Майкл Джонсон
25.2.1. Открытие файла qdbm : Майкл Джонсон 25.3. Чтение записей : Майкл Джонсон
25.3.1. Чтение определенной записи : Майкл Джонсон 25.4. Модификация базы данных : Майкл Джонсон
25.5. Пример : Майкл Джонсон Глава 26 Синтаксический анализ параметров командной строки : Майкл Джонсон
продолжение 822 : Майкл Джонсон 26.1. Таблица параметров : Майкл Джонсон
26.1.1. Определение параметров : Майкл Джонсон 26.1.2. Вложенные таблицы параметров : Майкл Джонсон
26.2. Использование таблиц параметров : Майкл Джонсон 26.2.1. Создание содержимого : Майкл Джонсон
26.2.2. Синтаксический анализ командной строки : Майкл Джонсон 26.2.4. Автоматические справочные сообщения : Майкл Джонсон
26.3. Использование обратных вызовов : Майкл Джонсон 26.4. Обработка ошибок : Майкл Джонсон
26.5. Псевдонимы параметров : Майкл Джонсон Глава 27 Динамическая загрузка во время выполнения : Майкл Джонсон
продолжение 834 : Майкл Джонсон 27.1. Интерфейс dl : Майкл Джонсон
продолжение 836 : Майкл Джонсон Глава 28 Идентификация и аутентификация пользователей : Майкл Джонсон
28.1. Преобразование идентификатора в имя : Майкл Джонсон продолжение 839 : Майкл Джонсон
28.1.1. Пример: команда id : Майкл Джонсон 28.2. Подключаемые модули аутентификации (РАМ) : Майкл Джонсон
продолжение 842 : Майкл Джонсон 28.2.1. Диалоги РАМ : Майкл Джонсон
28.2.2. Действия РАМ : Майкл Джонсон 23.1. Универсализация произвольных строк : Майкл Джонсон
23.2. Регулярные выражения : Майкл Джонсон 23.2.2. Сопоставление с регулярными выражениями : Майкл Джонсон
23.2.3. Простая утилита grep : Майкл Джонсон 23.1. Универсализация произвольных строк : Майкл Джонсон
23.2.2. Сопоставление с регулярными выражениями : Майкл Джонсон 23.2.3. Простая утилита grep : Майкл Джонсон
23.2.2. Сопоставление с регулярными выражениями : Майкл Джонсон 23.2.3. Простая утилита grep : Майкл Джонсон
24.1. Обработка ввода : Майкл Джонсон 24.1.1. Инициализация обработки ввода в S-Lang : Майкл Джонсон
24.2. Обработка вывода : Майкл Джонсон 24.2.6. Переключение наборов символов : Майкл Джонсон
24.2.7. Запись на экран : Майкл Джонсон 24.2.8. Рисование линий и прямоугольников : Майкл Джонсон
24.2.9. Использование цвета : Майкл Джонсон 24.1.1. Инициализация обработки ввода в S-Lang : Майкл Джонсон
продолжение 862 24.1.1. Инициализация обработки ввода в S-Lang : Майкл Джонсон
24.2.6. Переключение наборов символов : Майкл Джонсон 24.2.7. Запись на экран : Майкл Джонсон
24.2.8. Рисование линий и прямоугольников : Майкл Джонсон 24.2.9. Использование цвета : Майкл Джонсон
24.2.6. Переключение наборов символов : Майкл Джонсон 24.2.7. Запись на экран : Майкл Джонсон
24.2.8. Рисование линий и прямоугольников : Майкл Джонсон 24.2.9. Использование цвета : Майкл Джонсон
25.1. Обзор : Майкл Джонсон 25.2. Основные операции : Майкл Джонсон
25.2.1. Открытие файла qdbm : Майкл Джонсон 25.3. Чтение записей : Майкл Джонсон
25.3.1. Чтение определенной записи : Майкл Джонсон 25.4. Модификация базы данных : Майкл Джонсон
25.5. Пример : Майкл Джонсон 25.1. Обзор : Майкл Джонсон
25.2. Основные операции : Майкл Джонсон 25.2.1. Открытие файла qdbm : Майкл Джонсон
25.3.1. Чтение определенной записи : Майкл Джонсон 25.3.1. Чтение определенной записи : Майкл Джонсон
25.5. Пример : Майкл Джонсон Глава 26 Синтаксический анализ параметров командной строки : Майкл Джонсон
26.1. Таблица параметров : Майкл Джонсон 26.1.1. Определение параметров : Майкл Джонсон
26.1.2. Вложенные таблицы параметров : Майкл Джонсон 26.2. Использование таблиц параметров : Майкл Джонсон
26.2.1. Создание содержимого : Майкл Джонсон 26.2.2. Синтаксический анализ командной строки : Майкл Джонсон
26.2.4. Автоматические справочные сообщения : Майкл Джонсон 26.3. Использование обратных вызовов : Майкл Джонсон
26.4. Обработка ошибок : Майкл Джонсон 26.5. Псевдонимы параметров : Майкл Джонсон
продолжение 896 26.1. Таблица параметров : Майкл Джонсон
26.1.2. Вложенные таблицы параметров : Майкл Джонсон 26.1.1. Определение параметров : Майкл Джонсон
26.1.2. Вложенные таблицы параметров : Майкл Джонсон 26.2. Использование таблиц параметров : Майкл Джонсон
26.2.2. Синтаксический анализ командной строки : Майкл Джонсон 26.2.4. Автоматические справочные сообщения : Майкл Джонсон
26.2.1. Создание содержимого : Майкл Джонсон 26.2.2. Синтаксический анализ командной строки : Майкл Джонсон
26.2.4. Автоматические справочные сообщения : Майкл Джонсон 26.3. Использование обратных вызовов : Майкл Джонсон
26.4. Обработка ошибок : Майкл Джонсон Глава 27 Динамическая загрузка во время выполнения : Майкл Джонсон
27.1. Интерфейс dl : Майкл Джонсон продолжение 911 : Майкл Джонсон
продолжение 912 27.1. Интерфейс dl : Майкл Джонсон
продолжение 914 28.1. Преобразование идентификатора в имя : Майкл Джонсон
продолжение 916 : Майкл Джонсон 28.1.1. Пример: команда id : Майкл Джонсон
28.2. Подключаемые модули аутентификации (РАМ) : Майкл Джонсон продолжение 919 : Майкл Джонсон
28.2.1. Диалоги РАМ : Майкл Джонсон 28.2.2. Действия РАМ : Майкл Джонсон
28.1. Преобразование идентификатора в имя : Майкл Джонсон 28.1.1. Пример: команда id : Майкл Джонсон
продолжение 924 28.1.1. Пример: команда id : Майкл Джонсон
28.2. Подключаемые модули аутентификации (РАМ) : Майкл Джонсон 28.2.1. Диалоги РАМ : Майкл Джонсон
28.2.2. Действия РАМ : Майкл Джонсон продолжение 929
28.2.1. Диалоги РАМ : Майкл Джонсон 28.2.2. Действия РАМ : Майкл Джонсон
Приложение Б Исходный код ladsh : Майкл Джонсон Приложение Б Исходный код ladsh : Майкл Джонсон
Глоссарий : Майкл Джонсон Литература : Майкл Джонсон
notes.html    

Разделы
Околокомпьютерная литература (375)
Программирование (102)
Программы (75)
ОС и Сети (49)
Интернет (29)
Аппаратное обеспечение (16)
Базы данных (6)


Microsoft Office Журнал Компьютерра № 32 от 5 сентября 2006 года Журнал Компьютерра № 34 от 18 сентября 2006 года