Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с файловой системой DOS.doc
Скачиваний:
1
Добавлен:
16.11.2019
Размер:
299.01 Кб
Скачать

Int fseek(file *stream, long offset, int origin);

В этой функции параметр offset задает новое содержимое указателя текущей позиции в файле stream, а параметр origin - определяет способ задания новой позиции. Этот оператор может иметь значения, аналогичные используемым в функции lseek():

SEEK_SET

Абсолютное смещение от начала файла

SEEK_CUR

Смещение относительно текущей позиции

SEEK_END

Смещение относительно конца файла

При открытии файла указатель текущей позиции устанавливается на начало файла. Операции ввода/вывода вызывают увеличение значения этого указателя на количество прочитанных/записанных байтов.

Функция fseek() позволяет вам установить указатель за конец файла, однако при попытке установаит указатель до начала файла функция возвратит признак ошибки - ненулевое значение.

При использовании функции fseek() для позиционирования внутри файлов, открытых в текстовом режиме, необходимо учитывать особенность обработки текстовых файлов - автоматическую замену символа возврата каретки CR на пару символов: возврат каретки CR и перевод строки LF. Для текстовых файлов функция fseek() будет правильно работать только в следующих двух случаях:

  • поиск со смещением offset, равным нулю, при любом значении параметра origin;

  • поиск выполняется относительно начала файла, причем в качестве смещения offset используется значение, полученное специальной функцией ftell().

Функция ftell() возвращает текущее значение указателя позиции для файла, или -1 при ошибке:

long ftell(FILE *stream);

Пара функций ftell() - fseek() позволит вам правильно организовать позиционирование для файлов, открытых в текстовом режиме.

Есть еще одна возможность организовать позиционирование внутри файлов, открытых потоком - использовать пару функций fgetpos() - fsetpos():

Int fgetpos(file *stream, fpos_t *pos);

Int fsetpos(file *stream, fpos_t *pos);

Эти две функции используют для запоминания и установки позиции переменную с типом fpos_t, определенным в файле stdio.h. Функция fgetpos() записывает в эту переменную текущую позицию в потоке stream. Содержимое переменной затем может быть использовано для установки позиции в потоке с помощью функции fsetpos().

Обе эти функции возвращают нулевое значение в случае успешного завершения работы, или ненулевое - при ошибке.

Среди функций потокового ввода/вывода можно выделить группу функций форматного ввода/вывода. Это такие функции, как fputc(), fgetc(), fputs(), fgets(), fprintf(), fscanf().

Функции форматного ввода/вывода сильно облегчают запись/чтение таких элементов данных, как отдельные байты, текстовые строки, числа в различных форматах.

Для записи в поток отдельных байтов используется функция fputc():

Int fputc(int c, file *stream);

Байт c записывается в файл stream начиная с текущей позиции. После записи текущая позиция увеличивается на единицу. Функция возвращает записываемый байт или значение EOF, которое служит признаком ошибки.

Для побайтового чтения содержимого файла, открытого потоком, удобно использовать функцию fgetc():