Linux--共享内存mmap函数

本文深入探讨了Linux环境中使用mmap函数创建和操作共享内存的方法,包括其工作原理、使用场景及关键参数的设置,旨在帮助读者理解这一高效的进程间通信机制。

共享内存mmap函数

#include <sys/mman.h>

void *mmap(void *addr, size_t length, int prot, int flags,
              int fd, off_t offset);
//参数一:要映射的地址,不知道就写NULL去让系统选择
//参数二:映射的大小
//参数三:保护的方式有读,写,执行,空
		PROT_READ
		PROT_WRITE
		PROT_EXEC
		PROT_NONE
//参数四:标志位,私有/公开的,一般都是公开的
		MAP_SHARED
		MAP_PRIVATE
//参数五:要映射过来的文件
//参数六:偏移量

int munmap(void *addr, size_t length);  //卸载掉共享内存
//参数一:要卸载的共享内存首地址,mmap函数的返回值就是首地址
//参数二:卸载的共享内存的长度
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>

struct stu{
int id; 
char name[32];
};

int main( void ) { 
int fd = open("tmp.txt", O_RDWR|O_CREAT|O_TRUNC, 0644);
if ( fd == -1 ) perror("open"),exit(1);

//更改文件大小,文件大小最好足够写入
ftruncate(fd, sizeof(struct stu));

//将文件映射到共享内存
struct stu *p = (struct stu*)mmap(NULL, sizeof(struct stu), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

//写入 
p->id = 1;
strcpy(p->name, "zhangsan");

//卸载共享内存
munmap(p, sizeof(struct stu));
close(fd);
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值