Язык С



Дескрипторы файлов


В операционной системе UNIX весь ввод и вывод осуществ- ляется посредством чтения файлов или их записи, потому что все периферийные устройства, включая даже терминал пользова- теля, являются файлами определенной файловой системы. Это означает, что один однородный интерфейс управляет всеми свя- зями между программой и периферийными устройствами. В наиболее общем случае перед чтением из файла или за- писью в файл необходимо сообщить системе о вашем намерении; этот процесс называется "открытием" файла. Система выясня- ет,имеете ли вы право поступать таким образом (существует ли этот файл? имеется ли у вас разрешение на обращение к не- му?), и если все в порядке, возвращает в программу небольшое положительное целое число, называемое дескриптором файла. всякий раз, когда этот файл используется для ввода или выво- да, для идентификации файла употребляется дескриптор файла, а не его имя. (Здесь существует примерная аналогия с исполь- зованием READ (5,...) и WRITE (6,...) в фортране). Вся ин- формация об открытом файле содержится в системе; программа пользователя обращается к файлу только через дескриптор фай- ла. Для удобства выполнения обычных операций ввода и вывода с помощью терминала пользователя существуют специальные сог- лашения. Когда интерпретатор команд ("SHELL") прогоняет программу, он открывает три файла, называемые стандартным вводом, стандартным выводом и стандартным выводом ошибок, которые имеют соответственно числа 0, 1 и 2 в качестве деск- рипторов этих файлов. В нормальном состоянии все они связаны с терминалом, так что если программа читает с дескриптором файла 0 и пишет с дескрипторами файлов 1 и 2, то она может осуществлять ввод и вывод с помощью терминала, не заботясь об открытии соответствующих файлов.

Пользователь программы может перенаправлять ввод и вывод на файлы, используя операции командного интерпретатора SHELL "<" и ">" :

PROG <INFILE>OUTFILE

В этом случае интерпретатор команд SHELL изменит присваива- ние по умолчанию дескрипторов файлов 0 и 1 с терминала на указанные файлы. Нормально дескриптор файла 2 остается свя- занным с терминалом, так что сообщения об ошибках могут пос- тупать туда. Подобные замечания справедливы и тогда, когда ввод и вывод связан с каналом. Следует отметить, что во всех случаях прикрепления файлов изменяются интерпретатором SHELL, а не программой. Сама программа, пока она использует файл 0 для ввода и файлы 1 и 2 для вывода, не знает ни отку- да приходит ее ввод, ни куда поступает ее выдача.




    Содержание  Назад  Вперед