mmap实现共享内存 实例
时间: 2024-06-15 09:03:39 浏览: 157
mmap是一种实现共享内存的方法,它可以将文件映射到进程的地址空间中,从而实现多个进程之间共享内存的目的。下面是一个mmap实现共享内存的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
int fd;
char *shared_memory;
// 打开一个文件用于共享内存
fd = open("shared_memory.bin", O_CREAT | O_RDWR, 0666);
if (fd == -1) {
perror("open");
exit(1);
}
// 调整文件大小
if (ftruncate(fd, sizeof(char)) == -1) {
perror("ftruncate");
exit(1);
}
// 将文件映射到内存中
shared_memory = (char *) mmap(NULL, sizeof(char), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (shared_memory == MAP_FAILED) {
perror("mmap");
exit(1);
}
// 写入共享内存
*shared_memory = 'A';
// 休眠一段时间,模拟其他进程读取共享内存的情况
sleep(5);
// 读取共享内存
printf("Shared memory value: %c\n", *shared_memory);
// 解除内存映射
if (munmap(shared_memory, sizeof(char)) == -1) {
perror("munmap");
exit(1);
}
// 关闭文件
close(fd);
return 0;
}
```
上述示例中,首先通过open函数打开一个文件,然后使用ftruncate函数调整文件大小,接着使用mmap函数将文件映射到内存中。通过将MAP_SHARED标志传递给mmap函数,实现了多个进程之间的共享内存。在示例中,我们将一个字符写入共享内存,并在休眠一段时间后读取共享内存的值。
阅读全文