MS-DOS для программиста


Программа BUFCOPY


В качестве примера приведем текст программы BUFCOPY (листинг 3.7), копирующей содержимое текстового файла.

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

Листинг 3.7. Файл bufcopy\ bufcopy.cpp

#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];

int main(int argc, char *argv[]) { time_t start, end; FILE *stream_from, *stream_to;

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

// Открываем файлы и используем для копирования // буфер стандартного размера if((stream_from = fopen (argv[1], "rt")) == NULL) { printf("Задайте имя входного файла!\n"); return(-1); }

stream_to = fopen (argv[2], "wt+");

// Определяем время начала копирования start = clock();

// Выполняем копирование файла filecpy(stream_from,stream_to);

// Определяем время завершения копирования end = clock();

// Выводим время копирования при использовании // буферов стандартного размера printf("Время копирования: %5.1f " "Размер буфера, байтов: %d\n", ((float)end - start) / CLK_TCK, BUFSIZ);

// Задаем свой буфер большего размера if((stream_from = fopen (argv[1], "rt")) == NULL) return(-1);

stream_to = fopen (argv[2], "wt+");

// Устанавливаем буферы как для входного, // так и для выходного файлов setvbuf (stream_from, buf1, _IOFBF , sizeof(buf1)); setvbuf (stream_to, buf2, _IOFBF , sizeof(buf2));

// Копируем файл и измеряем продолжительность // копирования start = clock(); filecpy(stream_from,stream_to); end = clock();

printf("Время копирования: %5.1f " "Размер буфера: %d\n", ((float)end - start) / CLK_TCK, BUFSIZ * 10);




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



Книжный магазин