【C语言】 1s内创建10G文件

今天学长让我帮他写一个程序,1s内创建一个10 Gb的文件,(他是做大数据的)。我刚刚开始用一般的做法,那是相当浪费时间,后来从网上找了半天,看到了一个貌似很有希望的程序,但是我也不是很懂,这里我只是给大家看看程序,我也不知道创建这么大的文件有什么用!

其实这里就是区别fputc与fwrite这两个函数,两者所用时间有很大差别!

用fputc执行效果:(1G大概用了30s吧)


图1 fputc执行效果

fwrite执行效果:

【C语言】 1s内创建10G文件_第1张图片

图2 fwrite执行效果

可以看出,fwrite基本上是立即执行完!

#include <stdio.h>
#include <windows.h>
#include <Mmsystem.h>
#include <time.h>
#pragma comment( lib,"winmm.lib" )

void main()
{
	unsigned long i, block,filesize;
	char type;
	FILE *fd;
	char filename[64];
	fpos_t pos;
	DWORD s_time,p_time;

	printf("Input your file name:");
	scanf("%s",filename);
	fd = fopen(filename,"wb+");
	if(fd == NULL)
	{
		perror("Create file Fail:");
		return ;
	}
setsize:
	printf("Input file size:");
	scanf("%d%c",&filesize,&type);
	s_time = clock();
	fgetpos (fd,&pos);
	switch(type)
	{
		case 'K':
		case 'k':block = 0x400; break;
		case 'M':
		case 'm':block = 0x100000;break;
		case 'G':
		case 'g':
			block = 0x40000000;
			for(i=0; i<filesize; i++)
			{
				pos += block;
				fsetpos (fd,&pos);
				fgetpos (fd,&pos);
			}
			goto end;
		default:goto setsize;
	}

	pos += block*filesize;
	fsetpos (fd,&pos);

end:
	fwrite("",1,1,fd);
	fclose(fd);
	p_time = clock();
	printf("Create file finish!\n");
	printf("Using Time:%ld ms\n",p_time-s_time);
}


你可能感兴趣的:(C语言,大容量文件)