创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡><)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
Linux系列专栏:Linux基础给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
mmap内存映射是一种可以用于进程间通信的技术,通过mmap
,多个进程之间可以直接读取和修改磁盘上的文件内容,从而实现进程通信。
同时也不需要像传统方式那样先将文件读入到用户空间,然后再从用户空间写入内核空间。这种映射机制提高了文件访问的效率。(相比于read()减少了一次拷贝开销)
#include
void* mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
函数参数:
函数返回值:
MAP_FAILED
,为(void *) -1释放映射区:
int munmap(void *addr, size_t length);
函数参数:
#include
#include
#include
#include
#include
#include
#include
int main()
{
int* ptr = NULL;
//获取文件大小
int fd,FileSize;
fd = open("file",O_RDWR);
FileSize = lseek(fd,0,SEEK_END);
if(FileSize == 0)
{
perror("file is NULL");
exit(0);
}
//mmap内存映射
if((ptr = mmap(NULL,FileSize,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0)) == MAP_FAILED)
{
perror("mmap failed");
exit(0);
}
close(fd);
//通过sync同步机制 修改内存,同步到文件中
ptr[0] = 0x34333231; //将前4个字节修改为1234
//释放内存映射区
munmap(ptr,FileSize);
return 0;
}
映射的成功与否与用户本身的权限无关,而是取决于open()
函数打开时的权限。
open打开时的权限需要小于映射时的权限
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |