지정한 크기의 파일을 생성하는 프로그램
처음의 착상 ¶
~cpp #include <stdio.h> #include <stdlib.h> #include <time.h> int main(int argc, char * argv[]) { FILE * fileHandle; int i, request; time_t start, end; if (argc != 3) { fprintf(stderr, "Usage : %s [length of dummy file] [dummy file name]", argv[0]); exit(1); } request = atoi(argv[1]); fileHandle = fopen(argv[2], "wb"); if (!fileHandle) { fprintf(stderr, "File open error occured."); exit(1); } start = clock(); for (i = 0; i < request; i++) fputc('\0', fileHandle); end = clock(); printf("\n%f\n", (double)(end - start) / CLK_TCK); fclose(fileHandle); return 0; }
신경쓴 버전. 1.1? ¶
~cpp #include <stdio.h> #include <stdlib.h> #include <time.h> int main(int argc, char * argv[]) { int divTable[6]; FILE * fileHandle; unsigned long request, extractMask; int i, j, fragSize; time_t start, end; char * frag; if (argc != 3) { fprintf(stderr, "Usage : %s [length of dummy file] [dummy file name]", argv[0]); exit(1); } request = atoi(argv[1]); fileHandle = fopen(argv[2], "wb"); if (!fileHandle) { fprintf(stderr, "File open error occured."); exit(1); } start = clock(); for (i = 0, extractMask = 0x0000000F; i < 6; i++, extractMask <<= 4) divTable[i] = (request & extractMask) >> (i * 4); for (i = 0; i < 6; i++) if (divTable[i]) { fragSize = 0x00000001 << (i * 4); frag = (char *)malloc(fragSize); if (!frag) { fprintf(stderr, "memory allocation error occured."); fclose(fileHandle); exit(1); } memset(frag, 0, fragSize); for (j = 0; j < divTable[i]; j++) fwrite(frag, sizeof(char), fragSize, fileHandle); free(frag); } end = clock(); printf("\n%f\n", (double)(end - start) / CLK_TCK); fclose(fileHandle); return 0; }
12389523 바이트의 쓰레기 파일을 각각 생성하는데 처음에 짠 허접 버전과 두번째의 약간 개선 버전이 각각 0.991초와 0.37초를 기록했다. 두번째 것을 만들면서.. 함수화 같은 거도 좀 했으면 좋겠다는 생각도 무럭무럭 무럭 들었으나.. 그놈의 귀찮음이 뭔지 ; 아무튼 발전이 없는 나로군.
zennith