mmap函数文件映射

mmap函数文件映射 (学习篇)

mmap():用来将某个文件内容映射到内存中,对该内存区域的存取即是直接对该文件内容的读写。这样可以加快文件访问速度。
返回值:成功返回映射的内存的起始地址。 错误返回(void*)-1

目的:将一个文件拷贝到另一个文件,
过程:打开两个文件,原文件以只读打开,目标文件以只写/如不存在则创建,将目标文件用 truncate函数撑大,两个文件分别用mmap函数映射, 用memcpy函数将原文件拷贝到目标文件。
运行出现段错误, pload2用%p打印为0xffffffff,用%d打印为-1,
解决 :把fd2=open(argv[2],O_CREAT|O_WRONLY,0666);中的O_CREAT|O_WRONLY只写/如不存在则创建改成O_RDWR |O_CREAT以读写打开/如不存在则创建,运行成功。

int main(int argc ,char* argv[])
{
 int fd1,fd2;
 struct stat f1_stat;
 int size,retur;
 fd1=open(argv[1],O_RDONLY);
 fd2=open(argv[2],O_CREAT|O_WRONLY,0666);//O_CREAT|O_WRONLY改成O_RDWR |O_CREAT
 assert(fd1>0&&fd2>0);
 retur=fstat(fd1,&f1_stat);
 if(retur==-1)
 {
  perror("fast");
 }
 size=f1_stat. st_size;
 truncate(argv[2],size);
 printf("fd1=%d  fd2=%d\n",fd1,fd2);
 char*pload1=NULL;
 char*pload2=NULL;
 pload1=mmap(NULL,size,PROT_READ,MAP_SHARED,fd1,0);
 pload2=mmap(NULL,size,PROT_WRITE,MAP_SHARED,fd2,0);
 printf("pload1=%p\n",pload1);
 printf("pload2=%p\n",pload2);
 memcpy(pload2,pload1,size);
 munmap(pload1,size);
 munmap(pload2,size);
 return 1;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值