我试图在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 ptr
3来自父级的描述符
来自父级的0xffffff ptr
为什么第二个mmap(来自父母)不起作用?
谢谢。

最佳答案

您请求的访问权限有一个小错误。在父部分中,您将O_RDONLY传递给shm_open(),但随后您将尝试用不允许的mmap()传递给它。

关于linux - 简单的内存共享问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20745835/

10-15 14:13