U E D R , A S I H C RSS

zennith/dummyfile

지정한 크기의 파일을 생성하는 프로그램

source code

처음의 착상

~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
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.0876 sec