mmap 实现共享内存demo
时间: 2023-08-11 19:17:14 浏览: 145
共享内存sample
以下是一个使用mmap实现共享内存的简单示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <string.h>
#define SHM_SIZE 1024 // 共享内存大小
int main(int argc, char *argv[]) {
int fd;
char *addr;
// 创建共享内存文件描述符
fd = open("/dev/zero", O_RDWR);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
// 分配共享内存
addr = mmap(NULL, SHM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (addr == MAP_FAILED) {
perror("mmap");
exit(EXIT_FAILURE);
}
// 关闭文件描述符
close(fd);
// 向共享内存写入数据
sprintf(addr, "Hello, shared memory!");
// 等待一段时间,以便观察共享内存的变化
sleep(5);
// 读取共享内存中的数据
printf("Shared memory content: %s\n", addr);
// 释放共享内存
munmap(addr, SHM_SIZE);
return 0;
}
```
该程序首先使用open函数打开/dev/zero文件,然后使用mmap函数将/dev/zero映射到进程的地址空间中,并返回一个指向共享内存的指针。接下来,程序向共享内存写入数据,等待一段时间后再读取共享内存中的数据,并最终释放共享内存。
注意,在使用mmap函数时,需要将第一个参数设置为NULL,表示由操作系统自动分配映射区域的起始地址。此外,需要将第四个参数设置为MAP_SHARED,表示创建共享映射。
阅读全文