Функция чтения из файла
Чтение из файла на нижнем уровне осуществляется побайтно, без буферизации, с помощью функции read.
Синтаксис:
int read(int fd, char *buffer,int count);
где fd - дескриптор файла, возвращаемый функцией open;
buffer – адрес структуры данных, определенной пользователем, где будут размещаться считанные данные в случае успешного завершения выполнения функции read;
count - количество байтов, которые определяет пользователь для считывания.
Функция возвращает количество фактически прочитанных байтов. В процессе выполнения функции ядро операционной системы обращается в таблице файлов к записи, которая соответствует значению пользовательского дескриптора файла, следуя за указателем. Затем оно устанавливает значения нескольких параметров ввода-вывода в адресном пространстве, тем самым устраняя необходимость в их передаче в качестве параметров функции. При выполнении режима ввода-вывода «чтение» формируются значения следующих параметров:
· устанавливается флаг, свидетельствующий о том, что ввод-вывод направляется в адресное пространство структуры пользователя;
· значению поля счетчика байтов присваивается количество байтов, которые должны быть прочитаны;
· устанавливается адрес пользовательского буфера данных;
· определяется значение смещения (из таблицы файлов), равное смещению в байтах внутри файла до места, откуда начинается ввод-вывод.
После считывания данные из блока копируются по назначенному адресу в структуру пользователя. При этом корректируются параметры ввода-вывода в адресном пространстве в соответствии с количеством прочитанных байтов: увеличивается значение смещения в байтах внутри файла и адрес структуры пользователя, куда будет доставлена следующая порция данных. Одновременно уменьшается число байтов, которые необходимо прочитать, чтобы выполнить запрос пользователя. Если запрос на чтение полностью не выполнен, происходит циклическое повторение описанных действий. Цикл завершается при достижении хотя бы одного из условий:
· запрос на чтение выполнен полностью;
· в файле больше нет данных (достигнут конец файла);
· операционная система обнаружила ошибку при чтении данных с диска или при копировании данных в структуру пользователя.
В процессе чтения данных происходит коррекция значения смещения в таблице файлов в соответствии с количеством фактически прочитанных байтов; поэтому успешное выполнение операций чтения выглядит как последовательное считывание данных из файла.
Дата добавления: 2015-02-16; просмотров: 636;