Курсовая работа: Особенности операционной системы UNIX
выводит список всех файлов текущего каталога на устройство (в файл) стандартного вывода, а команда
ls > output
переназначает выводной поток со стандартного вывода в файл "output" в текущем каталоге, используя вышеупомянутый системный вызов creat. Подобным же
образом, команда
mail mjb < letter
открывает (с помощью системного вызова open) файл "letter" в качестве файла
стандартного ввода и пересылает его содержимое пользователю с именем "mjb".
Процессы могут переназначать одновременно и ввод, и вывод, как, например, в
команднойстроке:
nroff -mm < doc1 > doc1.out 2> errors
где программа форматирования nroff читает вводной файл doc1, в качестве файла стандартного вывода задает файл doc1.out и выводит сообщения об ошибках в
файл errors ("2>" означает переназначение вывода, предназначавшегося для файла с дескриптором 2, который соответствует стандартному файлу ошибок).Програм-мы ls, mail и nroff не знают, какие файлы выбраны в качестве файлов стандартного ввода, стандартного вывода и записи сообщений об ошибках; командный процессор shell сам распознает символы "<", ">" и "2>" и назначает в соответствии с их указанием файлы для стандартного ввода, стандартного вывода и записи сообщений об ошибках непосредственно перед запуском процессов.
Вторым конструкционным элементом является канал, механизм, обеспечиваю-щий информационный обмен между процессами, выполнение которых связано с
операциями чтения и записи. Процессы могут переназначать выводной поток со
стандартного вывода на канал для чтения с него другими процессами, переназначившими на канал свой стандартный ввод. Данные, посылаемые в канал первыми
процессами, являются входными для вторых процессов. Вторые процессы так же
могут переназначить свой выводной поток и так далее, в зависимости от пожеланий программиста. И снова, так же как и в вышеуказанном случае, процессам нет необходимости знать, какого типа файл используется в качестве файла
стандартного вывода; их выполнение не зависит от того, будет ли файлом стандартного вывода обычный файл, канал или устройство. В процессе построения
больших и сложных программ из конструкционных элементов меньшего размера
программисты часто используют каналы и переназначение ввода-вывода при сборке и соединении отдельных частей. И действительно, такой стиль программирования находит поддержку в системе, благодаря чему новые программы могут работать вместе с существующими программами.
Например, программа grep производит поиск контекста в наборе файлов (являющихся параметрами программы) по следующему образцу:
grep main a.c b.c c.c
где "main" - подстрока, поиск которой производится в файлах a.c, b.c и c.c с
выдачей в файл стандартного вывода тех строк, в которых она содержится. Содержимое выводного файла может быть следующим:
a.c: main(argc,argv)
c.c: /* here is the main loop in the program */
c.c: main()
Программа wc с необязательным параметром -l подсчитывает число строк в файле
стандартного ввода. Командная строка