2010-05-11 333 views
3

在* inux编程中创建共享内存的函数将其作为参数之一。Linux共享内存

此关键字的含义是什么?我如何使用它?

编辑:

未共享存储器ID

回答

4

这只是一个系统V IPC(进程间通信)键,以便不同的过程可以创建或附连到共享存储器的同一块。密钥通常使用ftok()创建,它将完全指定的文件名和项目ID转换为可用的密钥。

由于应用程序通常可以在其所有不同的进程中使用相同的文件名(文件名通常是与您的应用程序关联的配置文件),因此每个不同的进程获取相同的密钥(或者,如果使用项目ID指定多个共享内存段,同一组键)。

例如,我们曾经所使用由我们的lex/yacc的代码处理的配置文件,所以我们只使用的路径名和一个项目ID为每个不同的共享存储器块(那里根据目的是三个或四个应用程序正在讨论的过程)。这实际上提出了很多的意义,因为它是解析和评估的数据从已存储在所述共享存储器块该配置文件

由于在系统上没有其他应用程序应该使用我们的配置文件制作的关键,没有冲突。关键本身不限于共享内存,它也可以用于信号量和其他IPC机制。

+0

是的,关键是通常使用'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当前)。 – tonio 2010-05-11 13:07:35

0

posix共享内存函数(shm_open和friends)有一个更友好的用户界面,它们可以接受唯一的文件名,这些文件名必须被应用程序用来打开同一个共享内存块。

话虽如此,在Linux下的/ dev/shm中打开一个文件通常也是可行的,然后使用MAP_SHARED进行映射,这实现了大致相同的效果。