* 15. ИНТЕРФЕЙС СИСТЕМЫ ДЕМОС
Все без исключения возможности операционной системы ДЕМОС доступны из программ на языке Си. Материал этой главыотносится к интерфейсу между Си-программами и операционнойсистемой ДЕМОС. Материал делится на следующие части:ввод/вывод, система файлов, процессы, сигналы. Предполага-ется знание основных концепций ОС ДЕМОС, а также понятий"файл", "процесс", "сигнал". Подробное описание системныхвызовов и соответствующих им функций из стандартной библио-теке имеется в руководстве программиста по ОС ДЕМОС и в опе-ративной документации (части 2 и 3). Например, если в опи-сании говорится о функции popen (3), то подробное описаниеследует искать в руководстве программиста, часть 4, или воперативной документации, часть 3; справку о функции можнополучить на терминал, набрав man 3 popen.Ввод/вывод
В описании библиотеки ввода/вывода был описан универ-сальный интерфейс, который одинаков для всего многообразияоперационных систем. На каждой конкретной операционной сис-теме функции стандартной библиотеки должны быть написаны втерминах ввода-вывода, доступных на данной машине. В следую-щих разделах описан набор функций ввода/вывода нижнегоуровня, поддерживаемых ядром операционной системы ДЕМОС.Дескрипторы файлов
В операционной системе ДЕМОС весь ввод и вывод осу-ществляется посредством чтения файлов или их записи, потомучто все периферийные устройства, включая терминал пользова-теля, являются файлами определенной файловой системы. Этоозначает, что один однородный интерфейс управляет всеми свя-зями между программой и периферийными устройствами. В наиболее общем случае перед чтением из файла илизаписью в файл необходимо сообщить системе о намерении сде-лать это; этот процесс называется "открытием" файла. Системавыясняет, имеет ли программа право поступать таким образом(существует ли этот файл? имеется ли разрешение на обраще-ние к нему?), и если все в порядке, возвращает в программунебольшое положительное целое число, называемое дескриптором -66- файла. Всякий раз, когда этот файл используется для вводаили вывода, для идентификации файла употребляется дескрипторфайла, а не его имя (здесь существует примерная аналогия сиспользованием read (5,...) и write (6,...) в Фортране). Всяинформация об открытом файле содержится в системе; программапользователя обращается к файлу только через дескрипторфайла. Для удобства выполнения обычных операций ввода и выводас помощью терминала пользователя существуют специальные сог-лашения. Когда интерпретатор команд (shell) прогоняет прог-рамму, он открывает три файла, называемые стандартным вво-дом, стандартным выводом и стандартным выводом ошибок, кото-рые имеют соответственно числа 0, 1 и 2 в качестве дескрип-торов этих файлов. В нормальном состоянии все они связаны стерминалом, так что если программа читает с дескрипторомфайла 0 и пишет с дескрипторами файлов 1 и 2, то она можетосуществлять ввод и вывод с помощью терминала, не заботясьоб открытии соответствующих файлов. Пользователь программы может перенаправлять ввод ивывод на файлы, используя в интерпретаторе команд символы < и >: prog < infile > outfile В этом случае интерпретатор команд изменит определениедескрипторов файлов 0 и 1 с терминала на указанные файлы.Обычно дескриптор файла 2 остается связанным с терминалом,так что сообщения об ошибках могут поступать туда. Подобныезамечания справедливы и тогда, когда ввод и вывод связан смежпроцессным каналом. Следует отметить, что в этом случаесвязь программы с файлами изменяется интерпретатором shell (или cshell), а не программой. Сама программа, пока онаиспользует файл 0 для ввода и файлы 1 и 2 для вывода, незнает ни откуда приходит ее ввод, ни куда поступает еевыдача.