Обычное использование системных
функций read и write обеспечивает
последовательный доступ к файлу,
однако процессы могут использовать
вызов системной функции lseek для
указания места в файле, где будет
производиться ввод-вывод, и
осуществления произвольного
доступа к файлу. Синтаксис вызова
системной функции: где fd - дескриптор файла,
идентифицирующий файл, offset -
смещение в байтах, а reference
указывает, является ли значение offset
смещением от начала файла,
смещением от текущей позиции
ввода-вывода или смещением от конца
файла. Возвращаемое значение, position,
является смещением в байтах до
места, где будет начинаться
следующая операция чтения или
записи. Например, в программе,
приведенной на Рисунке
5.10, процесс открывает файл,
считывает байт, а затем вызывает
функцию lseek, чтобы заменить
значение поля смещения в таблице
файлов величиной, равной 1023 (с
переменной reference, имеющей значение
1), и выполняет цикл. Таким образом,
программа считывает каждый 1024-й
байт файла. Если reference имеет
значение 0, ядро осуществляет поиск
от начала файла, а если 2, ядро ведет
поиск от конца файла. Функция lseek
ничего не должна делать, кроме
операции поиска, которая
позиционирует головку
чтения-записи на указанный
дисковый сектор. Для того, чтобы
выполнить функцию lseek, ядро просто
выбирает значение смещения из
таблицы файлов; в последующих
вызовах функций read и write смещение из
таблицы файлов используется в
качестве начального смещения. Предыдущая
глава || Оглавление
|| Следующая глава
5.5 УКАЗАНИЕ МЕСТА В ФАЙЛЕ,
ГДЕ БУДЕТ ВЫПОЛНЯТЬСЯ ВВОД-ВЫВОД -
LSEEК
position = lseek(fd,offset,reference);