Стандартные дескрипторы

Использование одной и той же процедуры print для этих разных целей не так уж странно: ведь экран терминала во многом ведёт себя как два файла, один из которых открыт для чтения, а другой — для записи. Чтение приводит к получению символов, введённых с клавиатуры. Записанные символы попадают на экран. Этих аналогий вполне достаточно, чтобы работать с клавиатурой и экраном как с файлами при помощи операций ввода/вывода.

Каждая программа изначально имеет три канала для связи с внешним миром: один для ввода и два для вывода. Эти «файлы» уже открыты, и от программиста не требуется их открывать заново (если не хочется чего-то особенного). Дескрипторы файлов программа может получить с помощью процедур STDIN, STDOUT и STDERR (строго говоря, это не совсем процедуры, но для нас это не важно). Приставка STD… в этих именах означает, что эти дескрипторы стандартные, то есть полагающиеся каждой программе по стандарту.

Вывод в дескриптор STDOUT приводит к печати строк на экране. Две следующих команды равносильны:

print {STDOUT} "Привет!\n";
print "Привет!\n";

Иными словами, STDOUT — это дескриптор, используемый процедурой print по умолчанию.

Чтение из STDIN останавливает программу, которая затем ждёт до тех пор, пока конец ввода не будет обозначен нажатием клавиш Ctrl+D.

read STDIN, $buffer, 1;

Дескриптор STDERR во многом похож на STDOUT, но предназначен для вывода сообщений об ошибках.

Операционная система Unix, а вслед за ней операционные системы семейства Linux, основаны на нескольких базовых идеологических принципах. Один из них отдаёт предпочтение узкоспециализированным программам, которые умеют делать немногое, но делают это хорошо. Такие программы часто называют утилитами. При противоположном подходе предпочтительнее программы универсальные. Разница здесь примерно такая же, как между хорошим набором инструментов и швейцарским армейским ножом, в котором есть всё, начиная с отвёртки и заканчивая штопором. У универсальности, помимо достоинств, есть и существенный недостаток. Универсальным инструментом, у которого с одной стороны ложка, а с другой — лопата, одинаково неудобно и копать землю, и кушать.

Конечно, большинство задач, которые пользователи решают при помощи компьютера, достаточно сложны. Как же решать их при помощи набора простых узкопрофильных программ? Естественно, нужно каким-то образом комбинировать возможности имеющихся программ. Для этих целей служит так называемый системный клей. Это простой язык программирования, с помощью которого можно соединить возможности простых программ для решения сложной задачи. В операционных системах Linux в качестве системного клея чаще всего применяется командный язык (Shell). Язык Perl тоже хорош в роли системного клея.

Написать о буферизации.

Информатика-54© А. Н. Швец