UNIX — универсальная среда программирования | страница 32



>команда флаги возможные имена файлов

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

Сообщения же об ошибках, выдаваемые командами, следует обрабатывать по-другому, иначе они затеряются в файле или программном канале. Поэтому каждая команда имеет еще один стандартный файл, называемый файлом диагностики, который обычно связан с вашим терминалом:

Рис. 1.2: Схема потоков в UNIX


Почти все рассматривавшиеся выше команды укладываются в эту схему; исключение составляют >who и >date, не имеющие входной информации, а также те, например >cmp или >diff, которые имеют определенное число входных файлов. (Посмотрите их флаг >'-'.)

Упражнение 1.7

Объясните разницу между командами

>$ who | sort

и

>$ who > sort

Процессы

Интерпретатор >shell выполняет и некоторые другие операции, помимо связывания через программный канал. Рассмотрим кратко вопрос одновременного выполнения нескольких программ, о чем уже упоминалось при обсуждении программных каналов. Например, можно запустить две команды с помощью одной командной строки, разделив их точкой с запятой; интерпретатор >shell распознает этот символ и разобьет строку на две команды:

>$ date; who

>Tue Sep 27 01:03:17 EDT 1983

>ken tty0 Sep 27 00:43

>dmr tty1 Sep 26 23:45

>rob tty2 Sep 26 23:59

>bwk tty3 Sep 27 00:06

>jj  tty4 Sep 26 23:31

>you tty5 Sep 26 23:04

>her tty7 Sep 26 23:34

Обе команды будут выполнены (подряд) прежде, чем интерпретатор вновь вернется с приглашением.

Можно также при желании запустить несколько команд одновременно. Предположим, что вы собираетесь заняться длительными вычислениями, например, подсчитать число слов в вашей книге, но не хотите ждать окончания команды >wc для перехода к другой работе. Тогда можно задать:

>$ wc ch* > wc.out &

>6944 Shell дает номер процесса

>$

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