Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Zennith/dummyfile: Difference between revisions

From ZeroWiki
imported>Unknown
No edit summary
 
(Repair batch-0008 pages from live compare)
 
Line 7: Line 7:
  #include <time.h>
  #include <time.h>
   
   
  int main(int argc, char * argv[]) {
  int main(int argc, char * argv[]) {
  FILE * fileHandle;
  FILE * fileHandle;
  int i, request;
  int i, request;
Line 13: Line 13:
   
   
  if (argc != 3) {
  if (argc != 3) {
  fprintf(stderr, "Usage : %s [length of dummy file] [dummy file name]", argv[0]);
  fprintf(stderr, "Usage : %s [length of dummy file] [dummy file name]", argv[0]);
  exit(1);
  exit(1);
  }
  }
   
   
  request = atoi(argv[1]);
  request = atoi(argv[1]);
   
   
  fileHandle = fopen(argv[2], "wb");
  fileHandle = fopen(argv[2], "wb");
   
   
  if (!fileHandle) {
  if (!fileHandle) {
Line 45: Line 45:
  #include <time.h>
  #include <time.h>
   
   
  int main(int argc, char * argv[]) {
  int main(int argc, char * argv[]) {
  int divTable[6];
  int divTable[6];
  FILE * fileHandle;
  FILE * fileHandle;
  unsigned long request, extractMask;
  unsigned long request, extractMask;
Line 54: Line 54:
   
   
  if (argc != 3) {
  if (argc != 3) {
  fprintf(stderr, "Usage : %s [length of dummy file] [dummy file name]", argv[0]);
  fprintf(stderr, "Usage : %s [length of dummy file] [dummy file name]", argv[0]);
  exit(1);
  exit(1);
  }
  }
   
   
  request = atoi(argv[1]);
  request = atoi(argv[1]);
   
   
  fileHandle = fopen(argv[2], "wb");
  fileHandle = fopen(argv[2], "wb");
   
   
  if (!fileHandle) {
  if (!fileHandle) {
Line 70: Line 70:
   
   
  for (i = 0, extractMask = 0x0000000F; i < 6; i++, extractMask <<= 4)
  for (i = 0, extractMask = 0x0000000F; i < 6; i++, extractMask <<= 4)
  divTable[i] = (request & extractMask) >> (i * 4);
  divTable[i] = (request & extractMask) >> (i * 4);
   
   
  for (i = 0; i < 6; i++)
  for (i = 0; i < 6; i++)
  if (divTable[i]) {
  if (divTable[i]) {
  fragSize = 0x00000001 << (i * 4);
  fragSize = 0x00000001 << (i * 4);
   
   
Line 86: Line 86:
  memset(frag, 0, fragSize);
  memset(frag, 0, fragSize);
   
   
  for (j = 0; j < divTable[i]; j++)
  for (j = 0; j < divTable[i]; j++)
  fwrite(frag, sizeof(char), fragSize, fileHandle);
  fwrite(frag, sizeof(char), fragSize, fileHandle);
   
   
Line 105: Line 105:


----
----
[[zennith]]
zennith
 

Latest revision as of 01:40, 27 March 2026

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


source code

처음의 착상

#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?

#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