In this https://stackoverflow.com/questions/5656530/how-to-use-shared-memory-with-linux-in-c建议OP使用线程mmap()
代替shmget()
在 Linux 中获取共享内存。
我参观过this http://www.cs.cf.ac.uk/Dave/C/node27.html页面和this http://www.jimscode.ca/index.php/component/content/article/13-c/45-c-simple-mmap-example页面获取一些文档,但第二个给出了一个关于mmap()
.
作为一个新手,需要在两个进程之间共享一些信息(以文本形式),我应该使用shmget()
方法或mmap()
?为什么?
两种方法都是可行的。mmap
方法有点限制shmget
,但更容易使用。shmget
是旧的 System V 共享内存模型,拥有最广泛的支持。mmap
/shm_open
是执行共享内存的新 POSIX 方式,并且更易于使用。如果您的操作系统允许使用 POSIX 共享内存,那么我建议您使用它。
一些提示:
- 如果您通过以下方式创建您的孩子
fork
then mmap
with MAP_ANONYMOUS | MAP_SHARED
是迄今为止最简单的方法 - 只需一个电话。MAP_ANONYMOUS
然而是一个 Linux 扩展POSIX 未指定 http://pubs.opengroup.org/onlinepubs/9699919799/functions/mmap.html.
- 如果您独立启动进程,但可以为它们提供共享内存名称,那么
shm_open
(+ ftruncate
) + mmap
with MAP_SHARED
是两/三个呼叫。需要librt
在某些操作系统上。
- 如果您的操作系统有
/dev/shm/
then shm_open
相当于打开一个文件/dev/shm/
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)