Роббинс Арнольд
Шрифт:
И конечно же, проверка работает:
Если вы попробуете это с
В данном случае это слишком поздно, поскольку оболочка урезала файл
4.5. Произвольный доступ: перемещения внутри файла
До сих пор мы обсуждали последовательный ввод/вывод, при котором данные читаются или записываются с начала файла и продолжаются до его конца. Часто это все, что требуется программе. Однако, возможно осуществление произвольного ввода/вывода; т.е. читать данные из произвольного положения в файле без необходимости предварительного чтения всего, что находится перед этим местом.
Смещение дескриптора файла является положением внутри открытого файла, начиная с которого будет осуществляться следующая операция чтения или записи. Программа устанавливает смещение с помощью системного вызова
Тип
Дескриптор открытого файла.
Позиция, в которую нужно переместиться. Интерпретация этого значения зависит от параметра
Описывает положение в файле, относительно которого отсчитывается
Таблица 4.4. Значения
Именованная константа | Значение | Комментарий |
---|---|---|
SEEK_SET | 0 | offset абсолютно, т.е. относительно начала файла |
SEEK_CUR | 1 | offset относительно текущей позиции в файле |
SEEK_END | 2 | offset относительно конца файла. |
Большое количество старого кода использует числовые значения, приведенные в табл. 4.4. Однако, любой новый код, который вы пишете, должен использовать символические имена, значение которых более ясно.
Смысл значений и их действие на положение в файле показаны на рис. 4.1. При условии, что файл содержит 3000 байтов и что перед каждым вызовом
Рис. 4.1. Смещения для
Отрицательные смещения относительно начала файла бессмысленны; они вызывают ошибку «недействительный параметр».
Возвращаемое значение является новым положением в файле. Поэтому, чтобы получить ваше текущее местоположение в файле, используйте
Буква