Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#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);
}
// ЋвЄалў Ґ¬ д ©«л Ё ЁбЇ®«м§гҐ¬ ¤«п Є®ЇЁа®ў Ёп
// ЎгдҐа бв ¤ ав®Ј® а §¬Ґа
if((stream_from = fopen(argv[1], "rt")) == NULL) {
printf("‡ ¤ ©вҐ Ё¬п ўе®¤®Ј® д ©« !\n");
exit(-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) exit(-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);
// Љ®ЇЁа㥬 ЎҐ§ ЁбЇ®«м§®ў Ёп ЎгдҐаЁ§ жЁЁ
if((stream_from = fopen(argv[1], "rt")) == NULL) exit(-1);
stream_to = fopen(argv[2], "wt+");
setvbuf(stream_from, NULL, _IONBF, 0);
setvbuf(stream_to, NULL, _IONBF, 0);
start = clock();
filecpy(stream_from,stream_to);
end = clock();
printf("‚аҐ¬п Є®ЇЁа®ў Ёп: %5.1f ЃгдҐаЁ§ жЁп Ґ ЁбЇ®«м§гҐвбп\n",
((float)end - start) / CLK_TCK);
exit(0);
}
// ”гЄжЁп ¤«п Є®ЇЁа®ў Ёп д ©«®ў
void filecpy(FILE *stream_from, FILE *stream_to) {
char linebuf[256];
// –ЁЄ« Є®ЇЁа®ў Ёп. “б«®ўЁҐ ўл室 Ё§ жЁЄ« -
// Є®Ґж ўе®¤®Ј® д ©«
while(!feof(stream_from)) {
// —Ёв Ґ¬ ў ЎгдҐа linebuf ®¤г бва®Єг
if(fgets(linebuf, 255, stream_from) == NULL) break;
// ‡ ЇЁблў Ґ¬ ᮤҐа¦Ё¬®Ґ ЎгдҐа linebuf
// ў ўл室®© д ©«
if(fputs(linebuf, stream_to) != 0) break;
}
// ‡ Єалў Ґ¬ ўе®¤®© Ё ўл室®© д ©«л
fclose(stream_from);
fclose(stream_to);
}