代码之家  ›  专栏  ›  技术社区  ›  Khaled Alshaya

在Linux中如何选择进程间通信的“密钥”?

  •  4
  • Khaled Alshaya  · 技术社区  · 16 年前

    很好的一天。。。

    我正在做一个家庭作业,上面写着我有5个过程;一台服务器和其余的都是客户端。 每个进程都应该由不同的可执行文件触发 .我将实现一个双向消息传递解决方案,但问题不在于消息传递本身。有没有一种优雅的方式来沟通 钥匙 在不同的可执行文件之间。i、 e.当我调用以下函数时:

    int msgget(key_t key, int msgflg);
    

    其他流程应该如何知道关键?

    我的家庭作业可以使用预先设定的键,但我想知道如何在真实的程序中完成。因为“我理解”的是,如果一个不相关的进程在某个用户的机器上请求我的密钥,可能会发生冲突。

    3 回复  |  直到 16 年前
        1
  •  10
  •   jspcal    16 年前

    一个惯例是使用 ftok() 要生成唯一密钥,请从 man

    函数的作用是使用 由给定 路径名(必须引用 现有的、可访问的文件)和 项目id的最低有效8位 (必须为非零)以生成 钥匙类型系统V IPC钥匙,适用 shmget(2)。

    结果值与 命名同一文件的所有路径名, 当项目id的相同值为 习惯于返回的值应该是 不同的时候(同时) 现有)文件或项目ID 相异

        2
  •  1
  •   Anon.    16 年前

    好吧,你通常会为你的程序生成一个伪随机密钥,并将其嵌入其中。有2^32个可能的键,因此发生碰撞的可能性非常小。

    如果需要保证不会发生意外碰撞,通常会使用命名管道,而不是消息传递。

        3
  •  1
  •   hobbs    16 年前

    对于“全球”资源,我支持jspcal ftok() 他在我前面回答说:)

    如果你有一堆相关的进程(也就是说,一个父进程和一堆子进程),它们应该共享一个队列,那么你应该调用msgget IPC_PRIVATE 这将创建一个带有未使用密钥的队列,并将句柄返回给它。

    推荐文章