在此线程中,建议OP在Linux中使用
我访问了此页面,并获得了一些文档,但是第二个页面给出了一个关于
几乎是新手,并且需要在两个进程之间共享一些信息(以文本形式),我应该使用
两种方法都是可行的。
一些提示:
-
如果您通过
fork 创建孩子,那么到目前为止mmap 和MAP_ANONYMOUS | MAP_SHARED 是最简单的方法-只需一个电话。但是,MAP_ANONYMOUS 是POSIX未指定的Linux扩展。 -
如果您独立启动进程,但可以为它们提供共享的内存名称,则
shm_open (+ftruncate )+mmap 和MAP_SHARED 是两个/三个调用。在某些操作系统上需要librt 。 -
如果您的操作系统具有
/dev/shm/ ,则shm_open 等效于在/dev/shm/ 中打开文件。
这在很大程度上与历史和未来方向有关。
曾几何时,有两个主要的(并且有些相互竞争)的unix版本-系统V和BSD。 SysV拥有自己的IPC版本,其中包括3类-共享内存,信号量和消息队列。 POSIX来尝试统一事物。
因此,目前我们有两个版本-posix共享内存,MQ和信号量以及sysV版本。只是为了使事情更加混乱,sysV版本也是posix的一部分。
因此,基本上,您的问题是您要使用Posix还是sysV风格的共享内存?一般而言,大多数人都选择了Posix,因为这似乎是通往未来的道路。但是,实际上,sysV内容是如此嵌入在如此多的系统中,因此您不得不怀疑它是否会消失。
因此,省去了长期的工作,这取决于您的项目和口味。通常,sysV版本实际上实际上更强大,但它们的界面笨拙,大多数人在初次接触时会感到有些困惑。 sysV信号量和消息队列尤其如此。在共享内存方面,可以说sysV和posix都很尴尬。 sysV版本带有笨拙的
那么您应该使用哪个呢?通常,posix版本。但是您应该真正熟悉sysV版本。它们具有某些功能,这些功能超出了posix版本的功能,您可能希望在特定情况下利用这些功能。