我是靠谱客的博主 顺心万宝路,这篇文章主要介绍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=%dn",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=%pn",pload1);
 printf("pload2=%pn",pload2);
 memcpy(pload2,pload1,size);
 munmap(pload1,size);
 munmap(pload2,size);
 return 1;
}

最后

以上就是顺心万宝路最近收集整理的关于mmap函数文件映射的全部内容,更多相关mmap函数文件映射内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部