Лабораторная работа: Програми копіювання файлів
setvbuf( stream_from, buf1, _IOFBF, sizeof( buf1 ) );
setvbuf( stream_to, buf2, _IOFBF, sizeof( buf2 ) );
Викликаємо функцію для копіювання, при цьому підраховуємо затрачений на її виклик час та використану пам'ять.
start = clock();
filecpy( stream_from, stream_to );
end = clock();
printf( "Copying time is %5.1f. Buffer size is %d bytes\n",
( ( float )end - start ) / CLK_TCK, BUFSIZ * 10 );
Відкриваємо файл, який варто копіювати, та файл до якого варто копіювати.
if( ( stream_from = fopen( argv[ 1 ], "rt") ) == NULL )
exit( 1 );
stream_to = fopen( argv[ 2 ], "wt+" );
Задаємо буфери. Але потіки не буферизується, оскільки використовується режим _IONBF .
setvbuf( stream_from, NULL, _IONBF, 0 );
setvbuf( stream_to, NULL, _IONBF, 0 );
Викликаємо функцію для копіювання, при цьому підраховуємо затрачений на її виклик час та використану пам'ять.
start = clock();
filecpy( stream_from, stream_to );
end = clock();
printf( "Copying time is %5.1f. Buffers is not used\n",
( ( float )end - start ) / CLK_TCK );
exit( 0 );
}
Функція копіювання файлів з використанням потоку вводу/виводу.
Аргументи: FILE *stream_from - покажчик на потік звідки копіювати;
FILE *stream_to - покажчик на потік в який копіювати;
Функція нічого не повертає і не використовує глобальних змінних.
void filecpy( FILE *stream_from, FILE *stream_to ) {
Оголошуємо символьний масив на 256 знаків