Скачиваний:
37
Добавлен:
01.05.2014
Размер:
2.56 Кб
Скачать
#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);

}

Соседние файлы в папке BUFCTL