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

11.7.1. Структуры данных

11.7.1. Структуры данных

Хотя код в ladsh1.с поддерживает концепцию задания как множества процессов (предположительно, объединенных вместе каналами), он не предоставляет способа указания того, какие файлы использовать для ввода и вывода. Чтобы позволить это, добавляются новые структуры данных и модифицируются существующие.

24:  REDIRECT_APPEND};
25:
26: struct redirectionSpecifier {
27:  enum redirectionTypetype; /* тип перенаправления */
28:  int fd; /*перенаправляемый файловый дескриптор*/
29:  char * filename; /* файл для перенаправления fd */
30: };
31:
32: struct childProgram {
33:  pid_t pid; /* 0 если завершен */
34:  char **argv; /* имя программы и аргументы */
35:  int numRedirections; /* элементы в массиве перенаправлений */
36:  struct redirectionSpecifier *redirections; /* перенаправления ввода-вывода*/
37: } ;

Структура struct redirectionSpecifier сообщает ladsh2.с о том, как установить отдельный файловый дескриптор. Она содержит enum redirectionTypetype, который указывает, является ли это перенаправление перенаправлением ввода, перенаправлением вывода, который должен быть добавлен к существующему файлу, либо перенаправлением вывода, которое заменяет существующий файл. Она также включает перенаправляемый файловый дескриптор и имя файла. Каждая дочерняя программа (struct childProgram) теперь специфицирует нужное ей количество перенаправлений.

Эти новые структуры данных не связаны с установкой каналов между процессами. Поскольку задание определено как множество дочерних процессов с каналами, связывающими их, нет необходимости в более подробной информации, описывающей каналы. На рис. 11.1 показано, как эти новые структуры должны выглядеть для команды tail < input-file | sort > output-file.


Рис. 11.1. Структуры данных, описывающие задание для ladsh2.с

Оглавление книги


Генерация: 0.177. Запросов К БД/Cache: 0 / 2
поделиться
Вверх Вниз