Cтраница 1
Дескриптор файла, чьи атрибуты должны быть клонированы для нового файла. [1]
![]() |
Связь таблиц u - ofile, file, inode. [2] |
Дескриптор файла содержит флаг, указывающий тип открытия файла ( чтение, запись, программный канал), счетчик числа ссылок к дескриптору, который используется для определения возможности удаления структуры, когда все процессы, связанные с этой структурой, закроют данный файл. [3]
Дескрипторы файлов О, 1 и 2 соответствуют стандартному вводу, стандартному выводу и стандартной ошибке соответственно. Обычно первый из них обращается к клавиатуре, а второй и третий - к дисплею, но пользователь может перенаправить их к файлам. Многие программы UNIX получают входные данные из стандартного устройства ввода и записывают выходные данные в стандартное устройство вывода. Такие программы называются фильтрами. [4]
Дескриптором файла FILEDESC возвращается OPEN или CREATE. В данной программе положение записи отслеживается простым подсчетом числа раз чтения или записи. [5]
Когда дескриптор файла используется в последующем системном вызове, например read, уровень VFS находит соответствующий v-узел и по нему определяет, является ли он локальным или удаленным, а также какой i-узел или r - узел его описывает. Затем он посылает серверу сообщение, содержащее дескриптор, смещение в файле ( хранящееся на стороне клиента, а не сервера) и количество байтов. Для повышения эффективности обмен информацией между клиентом и сервером выполняется большими порциями, как правило, по 8192 байт, даже если запрашивается меньшее количество байтов. [6]
Когда дескриптор файла используется в последующем системном вызове, например read, уровень VFS находит соответствующий v-узел и по нему определяет, является ли он локальным или удаленным, а также какой i-узел или г-узел его описывает. Затем он посылает серверу сообщение, содержащее дескриптор, смещение в файле ( хранящееся на стороне клиента, а не сервера) и количество байтов. Для повышения эффективности обмен информацией между клиентом и сервером выполняется большими порциями, как правило, по 8192 байт, даже если запрашивается меньшее количество байтов. [7]
По дескриптору файла файловая система должна найти i-узел соответствующего файла. Рассмотрим одно из возможных решений: просто поместим в таблицу дескрипторов файла указатель на i-узел. Несмотря на простоту, данный метод, увы, не работает. Проблема заключается в следующем. С каждым дескриптором файла должен быть связан указатель в файле, определяющий байт в файле, который будет считан или записан при следующем обращении к файлу. Где следует хранить этот указатель. Один вариант состоит в помещении его в таблице i-узлов. Однако такой подход не сможет работать, если несколько не связанных друг с другом процессов одновременно откроют один и тот же файл, так как у каждого процесса должен быть свой собственный указатель. [8]
Вызывающему процессу выдается дескриптор удаленного файла. Этот дескриптор файла отображается на v-узел при помощи таблиц уровня VFS. Обратите внимание, что на сервере не создается никаких записей в таблицах. Хотя сервер готов предоставить дескрипторы файлов по запросу, он не следит за состоянием дескрипторов файлов. [9]
Вызывающему процессу выдается дескриптор удаленного файла. Этот дескриптор файла отображается на v-узел при помощи таблиц уровня VFS. Обратите внимание, что на сервере не создается никаких записей в таблицах. Хотя сервер готов предоставить дескрипторы файлов по запросу, он не следит за состоянием дескрипторов файлов. [10]
Комиссия по защите дескрипторов файлов выдвинула протест против системы UNIX, потому что когда эта система возвращает дескриптор файла, она всегда возвращает самый маленький номер, который в данный момент не используется. [11]
Последующие операторы могут использовать дескрипторы файлов fd1 fd2, чтобы читать из этих файлов и писать в них. С этого момента нет разницы между доступом к файлу и доступом к терминалу, не считая того, что при обращении к терминалу не разрешается операция перемещения указателя в файле. [12]
Последующие операторы могут использовать дескрипторы файлов fd1 nfd2, чтобы читать из этих файлов и писать в них. С этого момента нет разницы между доступом к файлу и доступом к терминалу, не считая того, что при обращении к терминалу не разрешается операция перемещения указателя в файле. [13]
Здесь переменная а - дескриптор файла file. Флаг чтения или записи - это, как и имя файла, строковая константа, состоящая из одной буквы, которая должна быть набрана на нижнем регистре. [14]
Вызов open возвращает номер дескриптора файла, который должен быть запомнен для использования в последующих операциях ввода-вывода. Программист может более подробно установить причину ошибки, которая хранится во внешней переменной еггпо. [15]