在Linux系统mmap函数可能存在的问题

mmap函数实现文件映射到一个内存区域,这样我们可以读取和写入文件像读写内存,这比简单地调用读/ write.at有点快得多,我们可以将内存的内容到一个文件中实现存储备份,和,当然,地图文件的内容记忆恢复一些服务。此外,共享内存的mmap的实现是其一个主要的应用程序,和mmap系统调用使过程映射相同的普通文件的共享内存。



对于mmap的内容,请看unix环境高级编程12章。在这里,谈论你可能会遇到使用mmap函数时出现的问题:



/ /下面的代码在1.ls文件内容通过mmap函数为2.ls,忽略错误处理



打开()1。



int FD2 =开放(2.ls,o_creat | o_rdwr | o_trunc,s_irusr | s_iwusr); / /读写权限必须设置,如果只写权限,将产生SIGSEGV信号



/ / mmap必须先读取文件时,它被映射。



统计结构;



fstat(FD,ST);



Lseek(FD2 st.st_size-1,seek_set);



写(FD2 1,); / /必须,如果不设置,当写入数据时遇到文件结束,SIGBUS信号



void * _src = mmap(null,st.st_size,prot_read,map_shared,FD,0);



void * _des = mmap(null,st.st_size,prot_write,map_shared,fd2,0);



关闭(FD);关闭文件仍然可以修改文件的内容。



关闭(FD2);



Memcpy(_des,_src,st.st_size);



总之,可能出现的问题如下:



1。对于映射文件描述符必须具有读权限,否则将产生SIGSEGV信号



当2。内存内容写入映像文件,我们必须确保到文件的当前位置的长度不小于书面内容的长度,否则将产生SIGBUS信号。



三.关闭文件描述符并不能保证文件的内容没有被修改。



4.munmap不写回磁盘映射的内容