流程如何与IPC参数进行通信?

时间:2014-09-24 09:24:25

标签: c unix posix ipc shared-memory

我正在阅读POSIX中的共享内存,并想出了这个函数来建立一个共享内存

segment id = shmget(IPC_PRIVATE, size, S_IRUSR | S_IWUSR);

IPC_PRIVATE用于为流程创建新细分。现在我的问题是另一端的进程如何知道要进行通信的segment_id?如果所有启动过程都在向它发送信息,那么它如何在没有初始化机制的情况下这样做呢?

当我阅读更多关于它的内容时,我发现一个进程必须将自己附加到共享内存区域。但要这样做,我们需要共享内存的id。它是如何获得的?

1 个答案:

答案 0 :(得分:1)

在服务器 - 客户端模型的上下文中讨论,就像这样。

服务器可以通过指定IPC_PRIVATE的密钥来创建新的IPC结构,并将返回的标识符存储在某个地方(例如文件)以供客户端获取。

密钥IPC_PRIVATE保证服务器创建新的IPC结构。

这种技术的缺点是服务器需要文件系统操作才能将整数标识符写入文件,然后让客户端稍后检索此标识符。

客户端和服务器有多种方法可以在同一个IPC上进行会合 结构