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

We use cookies. Read the Privacy and Cookie Policy

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.с