readとfread 、writeとfwriteのファイル入出力を計測し、それぞれの性能の比較をしたいのですが、まるっきり実装方法がわからないです。
どうやって実行していけばいいのでしょうか。
ちなみに以下のコードをサンプルとして拡張させていくとのことでした。
C
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <time.h> 4 5 double get_current_timecount() { 6 struct timespec ts; 7 clock_gettime(CLOCK_MONOTONIC, &ts); 8 return ts.tv_sec + ts.tv_nsec*1e-9; 9 } 10 11 int main( int argc, char* argv[] ) { 12 double t1 = get_current_timecount(); 13 14 // do something 15 sleep(3); 16 17 double t2 = get_current_timecount(); 18 printf("%lf\n", t2-t1); 19 return 0; 20 }
fread/fwrite
1#include "../exp1.h" 2 3int main(int argc, char** argv) { 4 FILE* fpr; 5 FILE* fpw; 6 int ret; 7 char buf[4]; 8 9 if(argc != 2) { 10 printf("usage: %s [filename]\n", argv[0]); 11 exit(-1); 12 } 13 14 fpr = fopen(argv[1], "r"); 15 fpw = fopen("tmp.txt", "w"); 16 17 ret = fread(buf, sizeof(char), 4, fpr); 18 while (ret > 0) { 19 fwrite(buf, sizeof(char), ret, fpw); 20 ret = fread(buf, sizeof(char), 4, fpr); 21 } 22 fclose(fpr); 23 fclose(fpw); 24 25 return 0; 26} 27
###試したこと
main.c
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <time.h> 4 #include "exp1.h" 5 6 double get_current_timecount() { 7 struct timespec ts; 8 clock_gettime(CLOCK_MONOTONIC, &ts); 9 return ts.tv_sec + ts.tv_nsec*1e-9; 10 } 11 12 int main( int argc, char* argv[] ) { 13 FILE* fpr; 14 FILE* fpw; 15 int ret; 16 char buf[4]; 17 double t1 = get_current_timecount(); 18 19// 追加 20 if(argc != 2) { 21 printf("usage: %s [filename]\n", argv[0]); 22 exit(-1); 23 } 24 25 fpr = fopen(argv[1], "r"); 26 fpw = fopen("tmp.txt", "w"); 27 28 ret = fread(buf, sizeof(char), 4, fpr); 29 while (ret > 0) { 30 fwrite(buf, sizeof(char), ret, fpw); 31 ret = fread(buf, sizeof(char), 4, fpr); 32 } 33 fclose(fpr); 34 fclose(fpw); 35 36 //ここまで 37 double t2 = get_current_timecount(); 38 printf("%lf\n", t2-t1); 39 return 0; 40 }
回答4件
あなたの回答
tips
プレビュー