我正在尝试模拟 ubuntu 上两个进程之间的简单共享内存。这是代码:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
int main() {
pid_t pid = fork();
if (pid == 0) { //Child
int shm_fd = shm_open("JSHM", O_CREAT | O_RDWR, 0666);
ftruncate(shm_fd, 4096);
void *ptr = mmap(0, 4096, PROT_WRITE, MAP_SHARED, shm_fd, 0);
sprintf(ptr, "Jani");
printf("%i descriptor from child\n", shm_fd);
printf("%p ptr from child\n\n", ptr);
}
if (pid > 0) { //Parent
sleep(5);
int shm_fd = shm_open("JSHM", O_RDONLY, 0666);
printf("%i descriptor from parent\n", shm_fd);
void *ptr = mmap(0, 4096, PROT_WRITE, MAP_SHARED, shm_fd, 0);
//printf("%s", (char *)ptr);
printf("%p ptr from parent\n", ptr);
}
}
输出:
3 个来自 child 的描述符
0xb7750000 来自 child 的 ptr
3 来自父级的描述符
0xffffffff 来自父级的 ptr
为什么第二个 mmap(来自父级)不起作用?
谢谢。
最佳答案
您请求的访问权限存在轻微错误。在父部分中,您将 O_RDONLY
传递给 shm_open()
但随后您尝试使用
这是不允许的。mmap()
它PROT_WRITE
关于linux - 简单的内存共享问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20745835/