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函数文件映射内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复