#include #include #include #include #include #include int main(int argc, char* argv[]) { struct timeval time1, time2, time3, time4; double ftime1, ftime2, ftime3, ftime4; int repeat = 10000; int size = 10; void* buf; char* filename = "file"; int fd; int i; char* option; char* arg; /* 引数の処理 */ for ( i = 1 ; i < (argc-1) ; i+=2 ) { option = argv[i]; arg = argv[i+1]; if ( strcmp(option, "-repeat") == 0 ) { repeat = atoi(arg); } else if ( strcmp(option, "-size") == 0 ) { size = atoi(arg); } else if ( strcmp(option, "-filename") == 0 ) { filename = arg; } else { fprintf(stderr, "Unknown option: %s\n", option); exit(1); } } printf("repeat=%d\n", repeat); printf("size=%d\n", size); printf("filename=%s\n", filename); /* 大きさsizeのデータをrepeat回書き出す */ buf = malloc(size); fd = open(filename, O_CREAT); gettimeofday(&time1, 0); for ( i=0 ; i < repeat ; i++ ) { write(fd, buf, size); } gettimeofday(&time2, 0); close(fd); free(buf); /* 大きさrepeatのデータをsize回書き出す */ fd = open(filename, O_CREAT); buf = malloc(repeat); gettimeofday(&time3, 0); for ( i=0 ; i < size ; i++ ) { write(fd, buf, repeat); } gettimeofday(&time4, 0); close(fd); free(buf); // 結果の表示 printf("time1=%d.%06d\n", time1.tv_sec, time1.tv_usec); printf("time2=%d.%06d\n", time2.tv_sec, time2.tv_usec); printf("time3=%d.%06d\n", time3.tv_sec, time3.tv_usec); printf("time4=%d.%06d\n", time4.tv_sec, time4.tv_usec); ftime1 = time1.tv_sec + (1e-6 * time1.tv_usec); ftime2 = time2.tv_sec + (1e-6 * time2.tv_usec); ftime3 = time3.tv_sec + (1e-6 * time3.tv_usec); ftime4 = time4.tv_sec + (1e-6 * time4.tv_usec); printf("サイズ %d のデータを %d 回書き出すためにかかった時間は %f 秒\n", size, repeat, ftime2-ftime1); printf("サイズ %d のデータを %d 回書き出すためにかかった時間は %f 秒\n", repeat, size, ftime4-ftime3); }