Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТВ. КУЗНЕЦОВ Д. Б. СПО.docx
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
192 Кб
Скачать
☆

15. Стандартный ввод-вывод. Переопределение стандартного ввода-вывода в Shell. Выполнение команд в конвеере.

Когда программа запускается на выполнение, в ее распоряжение предоставляются три потока (или канала):

• стандартный ввод (standard input или stdin). По этому каналу данные передаются программе;

• стандартный вывод (standard output или stdout). По этому каналу программа выводит результаты своей работы;

• стандартный поток сообщений об ошибках (standard error или stderr). По этому каналу программы выдают информацию об ошибках.

Из стандартного входа программа может только читать, а два других потока могут использоваться программой только для записи.

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

Команда echo предназначена для выдачи на стандартный вывод строки символов, которая задана ей в качестве аргумента. После этого она выдает сигнал перевода строки и завершается. [user]$ echo ‘Привет!’

Перенаправление ввода/вывода

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

Реализация механизма основывается на следующих свойствах ОС UNIX. Во-первых, любой ввод/вывод трактуется как ввод из некоторого файла и вывод в некоторый файл. Клавиатура и экран терминала тоже интерпретируются как файлы (первый можно только читать, а во второй можно только писать). Во-вторых, доступ к любому файлу производится через его дескриптор (положительное целое число). Фиксируются три значения дескрипторов файлов. Файл с дескриптором 1 называется файлом стандартного ввода (stdin), файл с дескриптором 2 - файлом стандартного вывода (stdout), и файл с дескриптором 3 - файлом стандартного вывода диагностических сообщений (stderr). В-третьих, программа, запущенная в некотором процессе, "наследует" от породившего процесса все дескрипторы открытых файлов. Пользователь имеет удобные средства перенаправления ввода и вывода на другие файлы (устройства).

• > перенаправление вывода.

$ ls >f1.test

команда "ls" сформирует список файлов текущего каталога и поместит его в файл "f1". Если файл "f1" до этого существовал, то он будет затерт новым.

• >> перенаправление вывода, но файл при этом не обнуляется.

$ pwd >>f1

команда pwd сформирует полное имя текущего каталога и поместит его в конец файла "f1", т.е. ">>" добавляет в файл, если он непустой.

• < и << перенаправление ввода

$ wc -l <f1

подсчитает и выдаст на экран число строк в файле f1.

$ ed f2 <<!

создаст с использованием редактора файл "f2", непосредственно с терминала. Окончание ввода определяется по символу, стоящему правее "<<" . То есть ввод будет закончен, когда первым в очередной строке будет "!".

• | Конвейер

Символ '|' (pipe), помещенный между двумя командами, создает программный конвейер: стандартный вывод команды, стоящей слева, передается на стандартный ввод команды, стоящей справа. Этот прием позволяет создавать цепочки команд, передающих данные друг другу.

Конвейер может состоять более, чем из двух команд. Вывести число всех файлов текущего каталога, в имени которых встречается "txt": ls | grep txt | wc -w