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


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


игнорируются.

Параметры _IOFBF и _IOLBF эквивалентны.

Если в качестве адреса буфера buffer задать значение NULL, функция автоматически закажет буфер размером size.

Функция setvbuf() возвращает ноль при успешном завершении и ненулевую величину, если указан неправильный парметр mode или неправильный размер буфера size.

Для чего может понадобиться изменение размера буфера?

Главным образом - для сокращения времени, необходимого для позиционирования магнитных головок при выполнении операций одновременно над несколькими файлами, например, при копировании файлов, слиянии нескольких файлов в один и т.д.

При закрытии потока функцией fclose()

содержимое буфера записывается на диск. Если программе необходимо выполнить запись содержимого буфера на диск без закрытия файла, она может воспользоваться функцией fflush():

int fflush(FILE *stream);

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

Если поток открыт только для чтения, функция

fflush() очищает содержимое буфера, связанного с этим потоком.

В качестве примера приведем текст программы, копирующей содержимое текстового файла. Программа копирует этот файл три раза. В первый раз одна использует буфер стандартного размера, затем увеличивает размер буфера в десять раз, и, наконец, копирует файл без использования механизма буферизации. Каждый раз программа измеряет продолжительность копирования файла с помощью функции clock(), входящей в состав стандартных библиотек трансляторов Microsoft QC 2.5 и C 6.0.

#include <stdio.h> #include <stdlib.h> #include <time.h>

void filecpy(FILE *stream_from, FILE *stream_to);

// Буфера для файлов

char buf1[BUFSIZ * 10]; char buf2[BUFSIZ * 10];

void main(int argc, char *argv[]) {

time_t start, end; FILE *stream_from, *stream_to;

if(argc < 3) { printf("Задайте имена файлов!\n"); exit(-1); }

// Открываем файлы и используем для копирования // буфер стандартного размера




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