Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Общая информация Дескрипторы и ввод/вывод

Дескрипторы и ввод/вывод

Для ссылки на потоки ввода/вывода процессы UNIX используют дескрипторы. Дескрипторы являются небольшими беззнаковыми целыми, получаемыми от системных вызовов open и socket. Системный вызов open принимает в качестве аргументов имя файла и режим доступа для указания, должен ли файл быть открыт для чтения или для записи, или для обоих. Этот системный вызов может также использоваться для создания нового, пустого файла. Для передачи данных к дескриптору могут применяться системные вызовы read и write. Системный вызов close может использоваться для освобождения дескриптора.

Дескрипторы представляют лежащие в их основе объекты, поддерживаемые ядром, они создаются при помощи специфичных для типа объекта системных вызовов. В FreeBSD дескрипторы могут представлять четыре разновидности объектов: файлы, каналы, очереди fifo и сокеты.

· Файл является линейным массивом байтов с по крайней мере одним именем. Файл существует до тех пор, пока все его имена не будут явным образом удалены и ни у одного процесса не будет его сохраненного дескриптора. Процесс запрашивает дескриптор для файла, открывая файл по его имени с помощью системного вызова open. Доступ к устройствам ввода/вывода осуществляется, как к файлам.

· Канал (pipe) является линейным массивом байтов, как и файл, но он используется исключительно как поток ввода/вывода и является однонаправленным. У него также нет имени, поэтому он не может быть открыт с помощью open. Вместо этого он создается с помощью системного вызова pipe, который возвращает два дескриптора, один из которых принимает ввод, который надежно передается другому дескриптору без повторений и в том же порядке.

· Очередь fifo часто называют именованным каналом. Свойства очереди fifo идентичны свойствам канала, за исключением того, что она появляется в файловой системе; таким образом, ее можно открыть с использованием системного вызова open. Два процесса, желающих взаимодействовать друг с другом, каждый открывает по очереди fifo: один открывает для чтения, другой для записи.

· Сокет является временным объектом, который используется для межпроцессного взаимодействия; он существует лишь до тех пор, пока какой-нибудь процесс хранит ссылающийся на него дескриптор. Сокет создается с помощью системного вызова socket, который возвращает дескриптор для него. Имеются различные виды сокетов, поддерживающих разную семантику коммуникации, такую, как надежная доставка данных, сохранение порядка сообщений и сохранение рамок сообщения.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 67 гостей онлайн

Реклама на сайте: