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


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


Приведем обзор функций, предназначенных для потокового ввода/вывода.

Для записи данных в поток предназначена функция fwrite():

size_t fwrite(void *buffer, size_t size, size_t count, FILE *stream);

Эта функция записывает в файл stream блоки информации, каждый из которых имеет длину size

байтов. Количество блоков - count. Данные для записи расположены по адресу buffer.

Если файл открыт в текстовом режиме, каждый символ возврата каретки CR заменяется на два символа - возврата каретки CR и перевода строки LF.

Функция возвращает количество действительно записанных блоков информации, без учета замены символа CR в текстовом режиме.

Чтение данных потоком можно выполнить с помощью функции fread():

size_t fread(void *buffer, size_t size, size_t count, FILE *stream);

Эта функция используется аналогично предыдущей. Для распознавания конца файла и обнаружения ошибок после вызова этой функции необходимо использовать функции feof() и ferror().

Если при использовании функции fread() вы задали значения параметров size или count, равные нулю, функция fread() не изменяет содержимое буфера buffer.

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

int fseek(FILE *stream, long offset, int origin);

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

lseek():

SEEK_SET Абсолютное смещение от начала файла
SEEK_CUR Смещение относительно текущей позиции
SEEK_END Смещение относительно конца файла

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

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




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