Linux共享内存

时间:2010-05-11 12:56:52

标签: linux ipc unix shared-memory

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

这把钥匙是什么意思?我怎么用呢?

编辑:

不共享内存ID

2 个答案:

答案 0 :(得分:4)

它只是一个System V IPC(进程间通信)密钥,因此不同的进程可以创建或附加到同一块共享内存。密钥通常使用ftok()创建,它将完全指定的文件名和项目ID转换为可用密钥。

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

例如,我们曾经有一个使用由我们的lex / yacc代码处理的配置文件的应用程序,所以我们只使用了每个不同的共享内存块的路径名和一个项目ID(有三个或四个取决于目的有问题的过程)。这实际上很有意义,因为它是从解析和评估的数据,该配置文件存储在共享内存块中。

由于系统上没有其他应用程序应该使用我们的配置文件来创建密钥,因此没有冲突。密钥本身不仅限于共享内存,它也可以用于信号量和其他IPC机制。

答案 1 :(得分:0)

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

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