就没完成,
char 到char 好搞,
char 到int 好像不知道哪错了,沮丧,,,
int off_r=0;
int off_w=0;
int m_size=0;//mmap size
int page_now=0;
filename_write="letter";
//fd_w = open(filename_write,O_RDWR|O_CREAT|O_TRUNC|O_APPEND,0644);
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,BUF_SIZE_W,SEEK_CUR);
cout<<"length_r:"<<length_r<<endl;
//cout<<"length_w:"<<length_w<<endl;
lseek(fd_w,0,SEEK_SET);
//lseek(fd_r,0,SEEK_SET);
auto page=length_r/BUF_SIZE;
auto remain=length_r%BUF_SIZE;
cout<<"page:"<<page<<endl;
cout<<"remain:"<<remain<<endl;
int pagesize = sysconf (_SC_PAGESIZE);
printf ("pagesize is %d\n", pagesize);
int chck = write(fd_w,"0",length_r);//fix addr cannot be access
assert(chck);
lseek(fd_w,0,SEEK_SET);
while(1)
{
//m_size = (page_now <= page) ? BUF_SIZE : remain;//size of mmap
p_w = (int*)mmap(NULL,BUF_SIZE,PROT_WRITE|PROT_READ,MAP_SHARED,fd_w,off_w);
//p_w = (char*)mmap(NULL,BUF_SIZE,PROT_WRITE|PROT_READ,MAP_SHARED,fd_w,off_w);
//p_w = (char*)mmap(NULL,length_r,PROT_WRITE|PROT_READ,MAP_SHARED,fd_w,off_w);
//p_w = (int*)mmap(NULL,length_r*4,PROT_WRITE|PROT_READ,MAP_SHARED,fd_w,off_w);
assert(p_w);
int data_size = BUF_SIZE/4;// int = 4bit char = 1bit
int data_cpy[data_size]={0};//to save encrypt data from data_
for(int i=0;i<data_size;i++)
{
int tmp=(int)data_[i];//TODO:bug
int num_ecd=(int)pow((double)tmp,sk_) % sn_; //C multiply itself sk_ times, then mod sn_
/*
*int mt=data_[i];
*for(int j=0;j< sk_;j++) mt*=data_[i];
*int num_ecd = mt % sn_;
*/
data_cpy[i]=num_ecd;
//int ecd=data_[i];
//p_w[i]=data_[i];
}
memcpy(p_w,data_cpy,sizeof(data_cpy));
cout<<"sizeof(data_cpy):"<<sizeof(data_cpy)<<endl;
//memcpy(p_w, data_+off_r,BUF_SIZE);
//memcpy(p_w, data_,length_r);
off_r += (BUF_SIZE/4);
off_w += BUF_SIZE;
if(off_r >= length_r)
{
printf("===================\n");
int final_page_size=(length_r - off_r)*4;
off_w -= BUF_SIZE;
p_w = (int*)mmap(NULL,final_page_size,PROT_WRITE,MAP_SHARED,fd_w,off_w);
for(int i=0;i<final_page_size/4;i++)
{
int tmp=(int)data_[i];//TODO:bug
int num_ecd=(int)pow((double)tmp,sk_) % sn_; //C multiply itself sk_ times, then mod sn_
data_cpy[i]=num_ecd;
//int ecd=data_[i];
//p_w[i]=data_[i];
}
memcpy(p_w,data_cpy,final_page_size);
break;
}
}//while
lseek(fd_w,0,SEEK_SET);
length_w = lseek(fd_w,0,SEEK_END);
printf("length_w:%lld\nlength_r:%lld\n",length_w,length_r);
if ((msync((void *) p_w, length_w, MS_SYNC)) == -1)
perror ("msync");
munmap(p_w,length_w);
munmap(data_,length_r);
close(fd_w);
搞定:
long long off_r=0;
long long off_w=0;
//long long page_now=0;
int mp_size_r=0;
int mp_size_w=0;
filename_write="letter";
fd_w = open(filename_write,O_RDWR|O_CREAT|O_TRUNC,0644);
assert(fd_w);
//set size of letter
if((ftruncate(fd_w,length_r*4))==-1)
{
perror("ftruncate error");
exit(1);
}
length_w = lseek(fd_w,0,SEEK_END);
cout<<"length_r:"<<length_r<<endl;
cout<<"length_w:"<<length_w<<endl;
auto page=length_w/BUF_SIZE;
auto remain=length_w%BUF_SIZE;
cout<<"page:"<<page<<endl;
cout<<"remain:"<<remain<<endl;
int pagesize = sysconf (_SC_PAGESIZE);
printf ("pagesize is %d\n", pagesize);
//int chck = write(fd_w,"0",length_r);//fix addr cannot be access
//assert(chck);
lseek(fd_r,0,SEEK_SET);
lseek(fd_w,0,SEEK_SET);
while(1)
{
//printf("total_page %lld: %lld\n",page,page_now);
p_w = (int*)mmap(NULL,BUF_SIZE,PROT_WRITE|PROT_READ,MAP_SHARED,fd_w,off_w);
//p_w = (char*)mmap(NULL,BUF_SIZE,PROT_WRITE|PROT_READ,MAP_SHARED,fd_w,off_w);
//page_now++;//mark curent page num
//assert(p_w);//this make me debug a lot of time ,use it when you sure you can
if(p_w == MAP_FAILED)
{
perror("oooOOps,mmap error");
exit(1);
}
mp_size_w=BUF_SIZE;
mp_size_r=BUF_SIZE/4;
//printf("p_w: %p\n",p_w);
int data_size = mp_size_r;// int = 4bit char = 1bit
int data_cpy[data_size]={0};//to save encrypt data from data_
for(int i=0;i<data_size;i++)
{
int tmp=(int)data_[i];//TODO:bug
data_cpy[i]=(int)pow((double)tmp,sk_) % sn_; //C multiply itself sk_ times, then mod sn_
/*
*int mt=data_[i];
*for(int j=0;j< sk_;j++) mt*=data_[i];
*int num_ecd = mt % sn_;
*/
//data_cpy[i]=num_ecd;
}
memcpy(p_w,data_cpy,sizeof(data_cpy));
off_r += mp_size_r;// BUF_SIZE/4
off_w += BUF_SIZE;
if(off_r >= length_r)
{//final page
off_w -= BUF_SIZE;//go back
int final_page_size=length_w-off_w;
printf("final_page_size:%d\n",final_page_size);
p_w = (int*)mmap(NULL,final_page_size,PROT_WRITE,MAP_SHARED,fd_w,off_w);
if(p_w==MAP_FAILED)
{
perror("i,mmap error");
exit(1);
}
int arr_fp_size=final_page_size/4;//final page of data_
int data_cpy_fp[arr_fp_size]={0};//to save encrypt data from data_
for(int i=0;i<arr_fp_size;i++)
{
int tmp=(int)data_[i];//TODO:bug
data_cpy_fp[i]=(int)pow((double)tmp,sk_) % sn_; //C multiply itself sk_ times, then mod sn_
//data_cpy_fp[i]=num_ecd;
}
memcpy(p_w,data_cpy_fp,final_page_size);
mp_size_w=final_page_size;
mp_size_r=length_r-off_r;
break;
}
//if ((msync((void *) p_w,mp_size,MS_SYNC)) == -1)
//perror ("msync");
munmap(p_w,mp_size_w);
//munmap(data_,mp_size_r);
}//while
//lseek(fd_w,0,SEEK_SET);
//length_w = lseek(fd_w,0,SEEK_END);
//printf("length_w:%lld\nlength_r:%lld\n",length_w,length_r);
munmap(data_,length_r);
//munmap(p_w,length_w);
close(fd_w);