c - Linux共享内存: shmget() vs mmap()?

在 this线程 OP 建议使用 mmap() 而不是 shmget() 在 Linux 中获取共享内存。 我访问了this页和 this页面来获取一些文档,但第二个给出了一个关于 mmap() 的晦涩示例。

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

最佳答案

这两种方法都是可行的。 mmap方法比 shmget 更严格一些,但更易于使用。 shmget是旧的 System V 共享内存模型,支持最广泛。 mmap/shm_open是新的 POSIX 共享内存方式,更易于使用。如果您的操作系统允许使用 POSIX 共享内存,那么我建议您使用它。

一些提示:

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

https://stackoverflow.com/questions/21311080/

相关文章:

linux - 什么是抢占/什么是可抢占内核?到底有什么好处呢?

c - 如何检测当前进程是否正在由 GDB 运行

java - 如何在 Ubuntu 上设置 JAVA_HOME 路径?

linux - objdump 如何发出 intel 语法

python - 如何在 python jinja 模板中输出 loop.counter?

python - 使用 python 和 BeautifulSoup 从网页中检索链接

python - Django FileField with upload_to 在运行时确定

python - 是否有一个装饰器可以简单地缓存函数返回值?

linux - 为什么 find 命令的 -exec 选项需要反斜杠和分号?

python - 如何在 Python 中创建嵌套字典?