Подсистема ввода-вывода

Функции ввода-вывода в UNIX задаются в основном с помощью пяти системных вызовов: open, close, read, write и seek.

Открыть файл можно следующей командой:

file_descriptor = open (filejiame. mode)

Здесь mode — режим открытия файла (чтение, запись или то и другое); file_de-scriptor — дескриптор файла, служит для последующих ссылок на данный файл; file_name — имя открываемого файла. Чтение и запись осуществляются командами следующего вида:

after_reading_bytes - read (file_descriptor. buffer, bytes) after_writing_bytes = write (file_descriptor. buffer, bytes)

Здесь bytes — количество байтов, которые должны быть прочитаны или записаны; after_reading_bytes и after_writing_bytes — реально прочитанное и записанное коли­чество байтов соответственно.

При чтении возможны три ситуации, в каждой из которых чтение происходит по­следовательно:

- если это первое чтение из файла, то оно осуществляется последовательно с са­мого начала файла;

- если операции чтения предшествовала другая операция чтения из этого файла, то текущая операция предоставит данные, непосредственно следующие за пре­дыдущими;

- если предшествовала операция поиска seek (см. далее), то чтение осуществля­ется последовательно от точки смещения, указанной в операции seek.

Это же справедливо и по отношению к операции записи в файл. Обратите внима­ние, что все эти вызовы относятся к последовательному доступу и эффект прямой адресации достигается с помощью команды seek, смещающей текущую позицию файла:

Seek (fi1e_descriptor.di splacement.di splacement_type)

Здесь параметр displacement_type (тип смещения) определяет, является смещение абсолютным или относительным, а также задано оно числом байтов или числом блоков по 512 байт.

Важно заметить, что команда seek исполняется для магнитных дисков так же, как и для магнитных лент, которые нынче уже практически не используются, но во времена появления и становления UNIX-систем были часто используемым уст­ройством.

Чтобы закрыть файл, достаточно выполнить следующую команду:

close (file_descriptor)

Еще три примитива — gtty, stty, stat — позволяют получать и задавать информа­цию о файлах и терминалах.

Те же самые команды ввода-вывода применяются и к физическим устройствам. В UNIX-системах физические устройства представлены специальными файлами в единой структуре файловой системы. Это означает, что пользователь не может


322________________ Глава 10. Краткий обзор современных операционных систем

написать зависящую от устройств программу, если только эта зависимость не от­ражена в самом потоке передаваемых данных. Стандартные файлы ввода и выво­да, приписываемые пользовательскому терминалу, открывать обычным путем не требуется. Терминал открывается автоматически по команде входа в систему login.

Система ввода-вывода UNIX в отличие от большинства других систем ориентиро­вана на работу скорее с потоком данных, а не с записями. Здесь поток данных (stream)1 — это последовательность байтов, заканчивающаяся разделителем (то есть символом конца потока). Понятие потока данных позволяет проще добиться неза­висимости от устройств и унификации файлов с физическими устройствами и кон­вейерами. Тем самым пользователь получает гибкость в работе с группами дан­ных, но на него ложатся и дополнительные заботы, поскольку ему приходится писать программы управления данными. Пользователь может при необходимости относительно легко самостоятельно реализовать работу с записями. Чтобы рабо­тать с записями фиксированной длины, достаточно просто задавать постоянную длину во всех командах чтения и записи. Для нахождения позиции нужной записи при фиксированной длине записей нужно умножить длину записи на помер запи­си и выполнить команду seek. Работу с записями переменной длины можно орга­низовать, если разместить в начале каждой записи поле фиксированного размера, содержащее значение длины записи.








Дата добавления: 2016-09-20; просмотров: 547;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.