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


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

Открыть файл можно командой

file_descriptor = open (file_name, mode)

где параметр mode (режим) указывает, разрешено ли чтение, запись или и то и другое; file_descriptor – дескриптор файла, служит для последующих ссылок на данный файл.

Чтение и запись осуществляется командами следующего вида:

after_reading_bytes = read (fne_descriptor, buffer, bytes)

after_writing_bytes = write (file_descriptor, buffer, bytes)

где bytes – это число байтов, которые должны быть прочитаны или записаны;

after_reading_bytes и after_writing_bytes – это реально прочитанное и записанное количество байтов соответственно.

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

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

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

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

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

Seek (fiIe_descriptor, displacement, displacement_type).

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

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

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

close (file_descnptor)

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

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

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



Дата добавления: 2022-02-05; просмотров: 260;


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

Воспользовавшись поиском можно найти нужную информацию на сайте.

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

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.