5.8.1. Общие положения
Под перенаправлением
ввода-вывода понимают замену источника данных при вводе
информации в программу или адресата выводимых результатов работы программы
без ее модификации. Очевидно, источниками данных и адресатами результатов являются
файлы, а также посимвольные устройства
Необходимое условие возможности перенаправления ввода-вывода состоит в обеспечении независимости программ от файлов
и устройств. Иными словами, спецификаций файлов и имена устройств не должны в явном виде фигурировать в программе. Действительно, если, скажем, файл
указан в ней непосредственно, то для замены файла без
модификации программы не обойтись.
DOS позволяет сделать
программы в рассмотренном
смысле независимыми, обеспечивая:
1) доступ к командной
строке запуска программы с целью извлечения аргументов, в качестве которых можно задать файлы
(устройства);
2) возможность использования в программах так называемого стандартного УВВ (в роли которого, как правило, выступает CON) без его явного указания;
Тем не менее независимость
программ от файлов (устройств) сама по себе не обеспечивает широких
возможностей перенаправления ввода-вывода, особенно стандартного.
С целью организации перенаправления ввода-вывода
команд и программ система поддерживает:
1) замену файлов и устройств как аргументов в командной строке, а также единообразную трактовку файлов и
посимвольных устройств;
2) смену стандартного УВВ
своими командами, такими, как MODE, CITY и COMMAND;
3) замену стандартного УВВ в командной строке;
4) направление стандартного вывода одной программы (команды) на стандартный ввод другой программы
(команды), т.е. организацию конвейеров.
Все перечисленные способы, за исключением первого,
применимы только тогда, когда программа (команда DOS) использует стандартный ввод-вывод. Применимость первого способа
следует из его формулировки и распространяется на все файлы (устройства).
Вопросы замены
файлов и устройств в командной строке и
единообразной их трактовки уже затрагивались
нами ранее. Возможности этого наиболее ярко могут быть проиллюстрированы на
примере команды COPY:
■ COPY MYF1LE.TXT TEXT1.TXT — скопировать содержимое файла MYFILE.TXT в файл TEXT1.TXT;
■ COPY MYHLE.TXT TEXT2.TXT — то же, но в качестве адресата используется файл TEXT2.TXT;
■ COPY MYFILE.TXT PRN — отпечатать содержимое файла MYHLE.TXT на принтере;
■ COPY MYFILE.TXT NUL — скопировать содержимое файла MYFILE.TXT на фиктивное устройство с целью проверки файла на считываемость;
■ COPY CON MYFILE.TXT — ввести информацию в файл MYFILE.TXT с клавиатуры.
Краткий отчет о своей работе команда COPY выдает на стандартное УВВ. Концепция стандартного УВВ сводится к тому, что в системе зарегистрировано виртуальное УВВ, к которому обращаются команды (программы) и
которое связывается с реальным УВВ.
Использование стандартного УВВ в программах имеет то
преимущество, что программы получаются независимыми от устройства, причем имя
этого устройства передавать в них в качестве аргумента не нужно.
Смена стандартного УВВ командами DOS обеспечивает
перенаправление специфицированного для него ввода-вывода у всех запускаемых вслед за этим программ и
выдаваемых команд.
Пусть запускаемая по process программа или
выполняемая по process команда использует стандартное УВВ. Тогда замену стандартного УВВ в командной строке можно осуществить
путем указания в ней одной из следующих конструкций:
process
> file — перенаправляет стандартный вывод из process в файл Ще. Если файл отсутствует, то он создается, а
если существует — то заменяется;
process > > file — добавляет стандартный вывод из process в конец существующего файла file. Если файл
отсутствует, то он создается и тогда > >file эквивалентно >file;
process < file — перенаправляет стандартный ввод в process на существующий файл file.
Перечисленные средства могут комбинироваться в одной
командной строке.
Примеры:
■ DIR > FILELIST.TXT — вывести содержимое рабочего каталога не на экран дисплея, а в файл FILELIST.TXT;
■ TYPE MYFILE.TXT >PRN — распечатать содержимое файла MYFILE.TXT на принтере вместо отображения на экране дисплея;
■ BACKUP С:\*.* A: /S >PRN — выполнить резервирование файловой
структуры диска в приводе С на дискетах в приводе А и отпечатать отчет о
проделанной работе на принтере;
■ COPY MYHLE.TXT ТЕХГ.ТХТ >NUL — скопировать
содержимое файла, но не выдавать отчет;
■ PROG < INPUT.TXT > OUTPUT.TXT — обеспечить ввод исходных данных в программу PROG из файла INPUT.TXT, а вывод результатов ее работы — в файл OUTPUT.TXT.
При перенаправлении стандартного ввода-вывода в рабочем
каталоге, как правило, создаются временные файлы.
Вот почему при перенаправлении вывода команды DIR без аргумента
(т.е. для рабочего каталога) в среде старых версий DOS Вы можете увидеть
два новых файла, имена которых составлены из букв и цифр. Это именно те
временные файлы. Один из способов избавления от их фиксации в выводе команды DIR состоит в смене
текущего привода и задании дисковода в команде DIR явно.
Вместе со средствами перенаправления ввода-вывода
полезной оказывается команда ECHO, используемая
главным образом в командных файлах. Тем не менее ее
можно вводить и с клавиатуры. Один из вариантов ее задания обеспечивает посылку
на стандартное УВВ (на экран дисплея)
специфицированной в качестве аргумента строки. Это позволяет выводить текст и управляющие
символы на принтер или другое устройство, например:
■ ECHO ТЕКСТ >PRN — отпечатать строку ТЕКСТ на принтере;
■ ECHO ◄Ctrl-L► >PRN — послать на принтер управляющий символ, обеспечивающий прогон бумаги
до начала следующей страницы.
Направление стандартного вывода одной программы
(команды) на вход другой обеспечивается за счет использования конвейеров.
Конвейером в этом контексте называется последовательность программ (команд),
осуществляющих поэтапную обработку информационного потока. Конвейер синтаксически
оформляется как
processl |process2 | ... processN
и представляет собой по сути единый, но сложный процесс. Средства
конвейеризации программ реализуют один из методов их комплексирования в среде DOS.
Пример:
■ ECHO Y|DEL *.* — обеспечить автоматический ответ Y (для «Да») на запрос «Are yousure?» при удалении всех элементов каталога.
Конвейеризация может сочетаться в одной командной
строке с другими средствами перенаправления ввода-вывода.
Главным образом для использования в конвейерах DOS содержит три
команды-фильтра. Фильтром называется программа, вводящая информационный поток, преобразующая его
по определенному алгоритму и выводящая результат своей работы. К фильтрам DOS относятся следующие
команды:
FIND —
осуществляет поиск заданной последовательности символов в текстовых файлах;
MORE — обеспечивает постраничное отображение
содержимого текстового файла;
SORT — сортирует строки текстового файла в
лексикографическом порядке.
Заметим, что DOS обеспечивает, хотя
и весьма ограниченные, возможности подмены поблочных устройств, даже если
программа от них зависима (см. описание команд ASSIGN и SUBST).