Операционная система MS DOS (том 2)


Буферизация ввода/вывода - часть 6


При использовании функции 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, которое служит признаком ошибки.




- Начало -  - Назад -  - Вперед -