mmap实现共享内存实例
时间: 2024-06-15 08:03:39 浏览: 15
mmap是一种实现共享内存的方法,它可以将一个文件或者设备映射到进程的地址空间中,从而实现多个进程之间共享数据的目的。下面是一个mmap实现共享内存的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#define SHARED_MEM_SIZE 4096
int main() {
int fd;
char *shared_mem;
// 打开一个文件用于共享内存
fd = open("shared_mem_file", O_CREAT | O_RDWR, 0666);
if (fd == -1) {
perror("open");
exit(1);
}
// 调整文件大小
if (ftruncate(fd, SHARED_MEM_SIZE) == -1) {
perror("ftruncate");
exit(1);
}
// 映射共享内存到进程的地址空间
shared_mem = (char *) mmap(NULL, SHARED_MEM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (shared_mem == MAP_FAILED) {
perror("mmap");
exit(1);
}
// 使用共享内存
sprintf(shared_mem, "Hello, shared memory!");
// 解除映射
if (munmap(shared_mem, SHARED_MEM_SIZE) == -1) {
perror("munmap");
exit(1);
}
// 关闭文件
close(fd);
return 0;
}
```
上述示例中,首先通过open函数创建一个文件用于共享内存。然后使用ftruncate函数调整文件大小为指定的共享内存大小。接下来,使用mmap函数将文件映射到进程的地址空间中,返回一个指向共享内存的指针。通过这个指针,我们可以像操作普通内存一样对共享内存进行读写操作。最后,使用munmap函数解除映射,并关闭文件。