Linux 共享内存

3
在*inux编程中创建共享内存的函数之一需要一个键作为其参数之一。这个键的含义是什么?我应该如何使用它?
编辑:不是共享内存id。
2个回答

4
这只是一个System V IPC(进程间通信)键,以便不同的进程可以创建或附加到同一块共享内存。该键通常使用ftok()创建,它将完全指定的文件名和项目ID转换为可用键。
由于应用程序通常可以在所有不同的进程中使用相同的文件名(该文件名通常是与您的应用程序相关联的配置文件),因此每个不同的进程都会获得相同的键(或者更可能使用项目ID来指定多个共享内存段,获得相同的键集)。
例如,我们曾经有一个使用我们的lex/yacc代码处理的配置文件的应用程序,因此我们只使用了该路径名和一个项目ID用于每个不同的共享内存块(根据所讨论的进程的目的,共有三个或四个)。这实际上是有道理的,因为解析和评估数据是从该配置文件中存储在共享内存块中的。
由于系统上没有其他应用程序应该使用我们的配置文件来生成密钥,因此没有冲突。密钥本身并不限于共享内存,也可以用于信号量和其他IPC机制。

是的,关键是通常使用ftok创建的(请参见http://netbsd.gw.com/cgi-bin/man-cgi?ftok+3+NetBSD-current),并且从`shmget`中使用。 使用关键字,shmget可以创建共享段,也可以获取使用关键字标识的现有段,具体取决于您传递的标志(请参见http://netbsd.gw.com/cgi-bin/man-cgi?shmget+2+NetBSD-current)。 - tonio

0

POSIX 共享内存函数(shm_open 和其它)拥有更加用户友好的界面,因为它们可以接受一个唯一的文件名,应用程序必须使用该文件名来打开同一共享内存块。

话虽如此,在 Linux 下也通常可以在 /dev/shm 中打开一个文件,然后使用 MAP_SHARED 进行 mmap,从而实现类似的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接