研: 超大文件处理

给点信心啊。。。

加密,可正常输的版本,好像比之前的快了些,正常运行。

能处理1.6G左右,具体没看,,,,大了会直接跳出。

	//encryption
	//cout<<data_;
	/*
	 *ofstream out_lt("letter");
	 *for(auto i=0;i<length_r;i++)
	 *{//TODO:bug, if size of file too big ,core dump come 
	 *    int tmp=(int)data_[i];
	 *    //C multiply itself sk_ times, then mod sn_
	 *    int num_ecd=(int)pow((double)tmp,sk_) % sn_;
	 *    //out_lt<<num_ecd<<" ";//seprate with space
	 *    out_lt<<num_ecd;
	 *}
	 *out_lt.close();
	 */

	int	off=0;
	//const char *filename_read = filename.c_str();//filename 
	fd_r = open(filename_read,O_RDWR);
	assert(fd_r);

	filename_write="output_letter.data";
	fd_w = open(filename_write,O_RDWR|O_CREAT|O_TRUNC,0644);
	assert(fd_w);
	length_r = lseek(fd_r,0,SEEK_END);
	length_w = lseek(fd_w,length_r - 1,SEEK_CUR);
	cout<<"length_r:"<<length_r<<endl;
	cout<<"length_w:"<<length_w<<endl;
	int tp=	write(fd_w,"0",1);//fix addr cannot be access 
	assert(tp);

	lseek(fd_w,0,SEEK_SET);
	lseek(fd_r,0,SEEK_SET);
	
	ofstream out_lt("letter");
	auto page=length_r/BUF_SIZE;
	auto remain=length_r%BUF_SIZE;
	cout<<"page:"<<page<<endl;
	cout<<"length_r:"<<length_r<<endl;
	cout<<"size_:"<<size_<<endl;
	cout<<"\n======= off+BUF_SIZE :"<<off+BUF_SIZE<<"\nremain: "<<length_r - off <<"\nremain: "<<remain<< endl;

	for(auto k=0;k<length_r;k++)
	{
		//cout<<data_;
		int tmp=(int)data_[k];
		//C multiply itself sk_ times, then mod sn_
		int num_ecd=(int)pow((double)tmp,sk_) % sn_;
		//out_lt<<num_ecd<<" ";
		out_lt<<num_ecd;
	}

	for(auto k=0;k<page;k++)
	{
		lseek(fd_r,off,SEEK_SET);
		//cout<<"off: "<<off<<endl;
		data_ =(char*) mmap(NULL,BUF_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd_r,off);
		//p_w = (char*)mmap(NULL,BUF_SIZE,PROT_WRITE,MAP_SHARED,fd_w,off);
		p_w = (int*)mmap(NULL,BUF_SIZE,PROT_WRITE,MAP_SHARED,fd_w,off);
		/*
		 *for(auto i=off;i<off+BUF_SIZE-1;i++)
		 *{
		 *    //cout<<data_[i];
		 *    int tmp=(int)data_[i];
		 *    //C multiply itself sk_ times, then mod sn_
		 *    int num_ecd=(int)pow((double)tmp,sk_) % sn_;
		 *    //out_lt<<num_ecd<<" ";
		 *    out_lt<<num_ecd;
		 *    //cout<<num_ecd;
		 *    //memset(*p_w,num_ecd,sizeof(num_ecd));
		 *    //p_w++;
		 *}
		 */

		//memcpy(p_w,data_,BUF_SIZE);
		/*
		 *if(page==k)
		 *{
		 *    data_ = (char*)mmap(NULL,length_r - off ,PROT_READ|PROT_WRITE,MAP_SHARED,fd_r,off);
		 *    //p_w = (char*)mmap(NULL,length_r - off,PROT_WRITE,MAP_SHARED,fd_w,off);
		 *    p_w = (int*)mmap(NULL,length_r - off,PROT_WRITE,MAP_SHARED,fd_w,off);
		 *    //memcpy(p_w,data_,length_r -off );
		 *    //munmap(data_,length_r - off);
		 *    //munmap(p_w,length_r - off);
		 *    cout<<"length_r:"<<length_r<<endl;
		 *    cout<<"size_:"<<size_<<endl;
		 *    cout<<"\n======= off+BUF_SIZE :"<<off+BUF_SIZE<<"\nremain: "<<length_r - off <<"\nremain: "<<remain<< endl;
		 *    for(auto i=off;i<length_r;i++)
		 *    {
		 *        //cout<<data_[i];
		 *        int tmp=(int)data_[i];
		 *        //C multiply itself sk_ times, then mod sn_
		 *        int num_ecd=(int)pow((double)tmp,sk_) % sn_;
		 *        //out_lt<<num_ecd<<" ";
		 *        //out_lt<<num_ecd;
		 *        //memset(*p_w,num_ecd,sizeof(num_ecd));
		 *        //memcpy(p_w,num_ecd,sizeof(num_ecd) );
		 *        //p_w++;
		 *    }
		 *    //break;
		 *}
		 */
		off += BUF_SIZE;
	}
	out_lt.close();

	munmap(data_,length_r);
	munmap(p_w,length_r);
	close(fd_r);
	close(fd_w);

 

 

统计:

mmap + ofstream

time make run 

 

861M May 27 15:12 test.data

Now submit all the things, thanks!

real    1m41.327s
user    1m37.384s
sys    0m2.060s

 

1.6G May 27 15:16 test.data

....................
Now submit all the things, thanks!

real    3m2.381s
user    2m54.396s
sys    0m3.664s

都生成 4.8G May 27 15:25 letter

 

 

ifstream+ ofstream:

1.6G May 27 15:16 test.data

Now submit all the things, thanks!
177.80user 5.74system 3:07.56elapsed 97%CPU (0avgtext+0avgdata 2080656maxresident)k
3159640inputs+10028824outputs (47major+650847minor)pagefaults 0swaps

real    3m7.572s
user    2m57.812s
sys    0m5.744s

 

结论,没什么用,根本没提升,要用memcpy

 

 

对output_letter 进行memset

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值