Для ссылки на потоки ввода/вывода процессы UNIX используют дескрипторы. Дескрипторы являются небольшими беззнаковыми целыми, получаемыми от системных вызовов open и socket. Системный вызов open принимает в качестве аргументов имя файла и режим доступа для указания, должен ли файл быть открыт для чтения или для записи, или для обоих. Этот системный вызов может также использоваться для создания нового, пустого файла. Для передачи данных к дескриптору могут применяться системные вызовы read и write. Системный вызов close может использоваться для освобождения дескриптора.
Дескрипторы представляют лежащие в их основе объекты, поддерживаемые ядром, они создаются при помощи специфичных для типа объекта системных вызовов. В FreeBSD дескрипторы могут представлять четыре разновидности объектов: файлы, каналы, очереди fifo и сокеты.
· Файл является линейным массивом байтов с по крайней мере одним именем. Файл существует до тех пор, пока все его имена не будут явным образом удалены и ни у одного процесса не будет его сохраненного дескриптора. Процесс запрашивает дескриптор для файла, открывая файл по его имени с помощью системного вызова open. Доступ к устройствам ввода/вывода осуществляется, как к файлам.
· Канал (pipe) является линейным массивом байтов, как и файл, но он используется исключительно как поток ввода/вывода и является однонаправленным. У него также нет имени, поэтому он не может быть открыт с помощью open. Вместо этого он создается с помощью системного вызова pipe, который возвращает два дескриптора, один из которых принимает ввод, который надежно передается другому дескриптору без повторений и в том же порядке.
· Очередь fifo часто называют именованным каналом. Свойства очереди fifo идентичны свойствам канала, за исключением того, что она появляется в файловой системе; таким образом, ее можно открыть с использованием системного вызова open. Два процесса, желающих взаимодействовать друг с другом, каждый открывает по очереди fifo: один открывает для чтения, другой для записи.
· Сокет является временным объектом, который используется для межпроцессного взаимодействия; он существует лишь до тех пор, пока какой-нибудь процесс хранит ссылающийся на него дескриптор. Сокет создается с помощью системного вызова socket, который возвращает дескриптор для него. Имеются различные виды сокетов, поддерживающих разную семантику коммуникации, такую, как надежная доставка данных, сохранение порядка сообщений и сохранение рамок сообщения.
- 13/05/2010 20:26 - Поддержка нескольких файловых систем
- 13/05/2010 03:54 - Механизм взаимодействия сокетов
- 12/05/2010 18:13 - Устройства
- 12/05/2010 12:32 - Управление дескрипторами
- 12/05/2010 04:44 - Каналы 4.2BSD
- 11/05/2010 10:33 - Система ввода/вывода
- 11/05/2010 06:08 - Управление памятью внутри ядра
- 10/05/2010 20:06 - Отдельные отображения файла
- 10/05/2010 11:56 - Проектные решения по управлению памятью BSD
- 10/05/2010 05:46 - Управление памятью