Лекция: Перенаправление ввода и вывода и конвейеризация

Каждая запущенная из командного интерпретатора программа получает три открытых потока ввода/вывода: стандартный ввод (дескриптор 0); стандартный вывод (1); стандартный вывод сообщений об ошибках (2). По умолчанию все эти потоки ассоциированы с терминалом, т.е. программа, использующая только эти потоки, ожидает ввод с клавиатуры, а весь вывод осуществляется на экран монитора. Интерпретатор позволяет пользователю перенаправить потоки ввода/вывода, установив ввод из файла, а вывод в файл.

Все преимущества возможности перенаправления ввода/вывода становятся ясны при использовании еще одного мощного инструмента UNIX – конвейеров (программных каналов). Конвейером называется использование стандартного вывода одной команды в качестве стандартного ввода другой. Синтаксис перенаправления ввода/вывода:

 

команда >file перенаправление стандартного потока вывода в файл file

команда>>fileдобавление (дозапись) в файл file данных из стандартного потока вывода

<file получение стандартного потока ввода из файла file

p1|p2 передача стандартного потока вывода программы р1 в потов ввода p2

n>file переключение потока вывода из файла с дескриптором n в file

n>>file то же, но записи добавляются в file

n>&m слияние потоков с дескрипторами n и m

 

Пример:

sort textfile | lp

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

cat *.994 ¦ grep profits | lp

в текущем каталоге производится поиск файлов, имена которых заканчиваются на994(шаблон *.994); список таких файлов отправляется на ввод командыgrep, которая произведет поиск в этих файлах слова profits; затем строки, содержащие это слово, будут напечатаны.

my_prog 2>/dev/null

при запуске программы my_prog вывод ошибок (стандартный поток с дескриптором 2) перенаправляется в нулевое устройство /dev/null, т.е. подавляется.

my_prog >/dev/null 2>&1

сначала будет осуществлено слияние потоков 2 и 1 (оба будут указывать на терминал пользователя), а потом стандартный поток вывода будет перенаправлен в файл /dev/null

 

еще рефераты
Еще работы по информатике