【问题标题】:IPC vs domain sock vs named pipesIPC vs domain sock vs 命名管道
【发布时间】:2010-11-27 17:20:04
【问题描述】:

IPC 和 Unix 域套接字和命名管道有什么不同?

我从各种书籍中得到了模糊的定义,但无法弄清楚应该在哪里使用哪一个。

【问题讨论】:

标签: c ipc system


【解决方案1】:

两个进程相互通信的任何方式都可以被视为 IPC 的一种形式。

例如:

  1. 未命名管道 ( cat file.txt | grep foo ) 或 Named Pipes
  2. Unix 域套接字
  3. TCP 或 UDP 套接字
  4. Netlink Sockets on Linux
  5. 各种共享内存机制,例如内存映射文件
  6. 高速消息传递,例如ZeroMQ

【讨论】:

    【解决方案2】:

    正如 qrdl 所说,UNIX 域套接字和命名管道都是 IPC 机制。

    在这两个中,命名管道使用起来更简单,但比 UNIX 域套接字灵活得多。例如,如果您可能期望每个写入进程有多个读取进程,那么 UNIX 域套接字是必须的;如果您希望读取过程在写入过程执行期间停止和启动,那么您将需要 UNIX 域套接字。

    【讨论】:

      【解决方案3】:

      IPC 代表进程间通信。 UNIX 域套接字和命名管道只是两种 IPC 机制,在 Wikipedia 中有描述:

      【讨论】:

        【解决方案4】:

        感谢您关注这个问题,一些更新的功能:

        在域套接字中,实际通信(数据交换)不使用文件系统,而是使用内核内存中的缓冲区。默认为全双工模式。

        命名管道由它们的访问点识别,访问点是保存在文件系统中用于处理数据的文件。默认情况下,命名管道支持阻塞的读写操作。但是,可以通过在打开命名管道时指定 O_NONBLOCK 标志来使命名管道支持非阻塞操作。命名管道必须以只读或只写方式打开。不能打开读写,因为它是半双工的,单向通道。

        【讨论】:

        • OP 询问了域套接字。域套接字通常通过管道实现,因此它们与管道一样快。域套接字很有用,因为它们具有与网络套接字完全相同的接口(只是不同的套接字系列),因此如果您的应用程序支持套接字并且您发现双方都位于同一台计算机上,您可以轻松切换到域套接字以加快速度(X Windows 做到了)。所以你的回答是错误的。
        猜你喜欢
        • 1970-01-01
        • 2011-03-05
        • 1970-01-01
        • 1970-01-01
        • 2012-03-17
        • 1970-01-01
        • 1970-01-01
        • 2014-01-24
        • 2011-09-23
        相关资源
        最近更新 更多