this线程中,建议OP使用mmap()而不是shmget()来获得Linux中的共享内存.

作为一个新手,并且需要在两个进程之间共享一些信息(以文本形式),我应该使用shmget()方法还是mmap()方法?为什么?

推荐答案

这两种方法都是可行的.mmap方法比shmget方法有点限制,但更容易使用.shmget是旧的SystemV共享内存模型,具有最广泛的支持.mmap/shm_open是POSIX实现共享内存的新方法,更易于使用.如果您的操作系统允许使用POSIX共享内存,那么我建议您这样做.

一些提示:

  • 如果你通过fork创建你的子元素,那么mmapMAP_ANONYMOUS | MAP_SHARED是目前为止最简单的方法——只需一个电话.然而,MAP_ANONYMOUS是Linux扩展not specified by POSIX.
  • 如果独立启动进程,但可以为它们提供一个共享内存名,那么shm_open(+ftruncate)+mmapMAP_SHARED是三分之二的调用.在某些操作系统上需要librt.
  • 如果你的操作系统有/dev/shm/,那么shm_open相当于在/dev/shm/中打开一个文件.

C++相关问答推荐

使用单个字节内的位字段

通过管道将一个子系统的标准输出发送到另一个子系统的标准输出

如何在IF语句中正确使用0.0

在一个小型玩具项目中实现终端历史记录功能

在C语言中,在数学运算过程中,为什么浮点数在变量中的行为不同

Rust FFI--如何用给出返回引用的迭代器包装C风格的迭代器?

Char变量如何在不使用方括号或花括号的情况下存储字符串,以及它如何迭代到下一个字符?

将字符串数组传递给C中的函数:`str[dim1][str_size]`vs`*str[dim1]`

在C++中允许使用字符作为宏参数

C语言中浮点数的取整方式浮点数尾数超过23位时如何取整剩余部分

为什么编译器不能简单地将数据从EDI转移到EAX?

OSDev--双缓冲重启系统

使用Open62541向OPCUA服务器发送读请求时内存泄漏

基于蝶数恰好有8个除数的事实的代码

在printf()中用%.*S格式填充长度为0的字符串是否会调用任何UB?如果是,是哪一个?

当我将偏移量更改为任何非零值时,C中的mmap共享内存出现无效参数错误

在分配内存后使用指针是未定义的行为吗?

GnuCobol 使用 double 类型的参数调用 C 函数

比 * 更快的乘法

C语言程序流程解释