如何在 linux 下的 C 中的两个子进程之间共享缓冲区?
How do I share a buffer between two children processes in C under linux?
我想要一个创建一堆子进程的父进程,我希望它们都在一个缓冲区上运行(进行读写操作)。
为了澄清,"buffer" 我的意思是一个 C 字符串(空终止字符串),我想要的是......例如,如果 "cat" 存储在我的缓冲区中并且 child0 修改this into "cat-cat",child1 和 child2 等也将看到缓冲区的内容为 "cat-cat"。
似乎有一个命令,mmap
完全符合我的要求,但我在互联网上看到了很多指南,但问题是我很难将注意力集中在共享内存区域上所以我真的需要一个具体的例子来说明如何使用它来满足我的需要,none 我见过的指南似乎正确地涵盖了这一点(其中大多数只涵盖读访问,而那些涵盖写访问的似乎适用于更复杂的情况,因此有我不太理解的复杂代码)。因此,如果您要将其标记为重复,请牢记这一点。
为了进一步澄清和简化我的问题...如果我有
$字符 *buf$
...在我的父程序中..我需要编写哪些代码指令以便通过编写
$strcpy(buf, "cat")$
...在我的一个子进程中,更改将对所有子进程可见?
如您所料,您可以在 fork()
-ing 子进程 之前使用 mmap 设置共享内存 space:
#include <sys/mman.h>
char *shared_mem = mmap(NULL, MEMSIZE, PROT_READ|PROT_WRITE,
MAP_SHARED|MAP_ANONYMOUS, -1, 0);
现在,此映射在所有进程之间共享,一个进程的修改将反映在其他进程中。
我想要一个创建一堆子进程的父进程,我希望它们都在一个缓冲区上运行(进行读写操作)。
为了澄清,"buffer" 我的意思是一个 C 字符串(空终止字符串),我想要的是......例如,如果 "cat" 存储在我的缓冲区中并且 child0 修改this into "cat-cat",child1 和 child2 等也将看到缓冲区的内容为 "cat-cat"。
似乎有一个命令,mmap
完全符合我的要求,但我在互联网上看到了很多指南,但问题是我很难将注意力集中在共享内存区域上所以我真的需要一个具体的例子来说明如何使用它来满足我的需要,none 我见过的指南似乎正确地涵盖了这一点(其中大多数只涵盖读访问,而那些涵盖写访问的似乎适用于更复杂的情况,因此有我不太理解的复杂代码)。因此,如果您要将其标记为重复,请牢记这一点。
为了进一步澄清和简化我的问题...如果我有 $字符 *buf$ ...在我的父程序中..我需要编写哪些代码指令以便通过编写 $strcpy(buf, "cat")$ ...在我的一个子进程中,更改将对所有子进程可见?
如您所料,您可以在 fork()
-ing 子进程 之前使用 mmap 设置共享内存 space:
#include <sys/mman.h>
char *shared_mem = mmap(NULL, MEMSIZE, PROT_READ|PROT_WRITE,
MAP_SHARED|MAP_ANONYMOUS, -1, 0);
现在,此映射在所有进程之间共享,一个进程的修改将反映在其他进程中。