我们对单个进程中多个线程访问的共享数据非常熟悉。但是,我们如何才能使多个进程共享一块内存呢?
答案 0 :(得分:1)
您想要的例程是mmap
,它接受文件描述符,并返回指向一块内存的指针。然后,多个进程都使用相同的文件名来获取它。当然,您需要协调读/写,以便没有人必须处理损坏的数据。
文件名可以是文件系统中实际文件的文件名,也可以是传递给shm_open
的名称。
实际上,这取决于你想要做什么。如果您只是fork()
来创建其他进程,则子进程与父进程共享内存,并具有某些(已记录的)异常。除非你致电exec()
。使用fork()
而不使用exec()
会导致无数的麻烦,所以除了简单的情况外不应该这样做。
答案 1 :(得分:1)
有关详细信息,请参阅shm_overview(7)
,但这里是一个快速运行的函数来调用创建/删除匿名内存映射:
shm_open(2)
创建和/或附加到共享内存并为其获取文件描述符ftruncate(2)
,用于在创建mmap(2)
将共享内存映射到您的进程地址空间munmap(2)
从流程地址空间中删除映射shm_unlink(3)
删除共享内存段答案 2 :(得分:0)