2009-09-12 67 views
7

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

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

+0

该线程似乎得到更多的关注:http://stackoverflow.com/questions/9475442/unix-domain-socket-vs-named-pipes – schmijos 2013-03-23 10:04:14

回答

6

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

例如:

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

由于qrdl指出,UNIX域套接字和命名管道都是IPC机制。

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

0

感谢聚焦的问题,很少更新的功能:

在域套接字,实际通信(数据交换)不使用文件系统,但在缓存内核内存。默认情况下,它是全双工模式。

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

+2

OP被问及域套接字。域套接字通常在管道上实现,因此它们与管道一样快。域套接字非常有用,因为它们与网络套接字具有完全相同的接口(只是不同的套接字系列),所以如果您的应用程序支持套接字,并且您发现双方都位于同一台计算机上,则可以轻松切换到域套接字以加快速度(X Windows就是这样)。所以你的回答是不正确的。 – qrdl 2009-09-13 05:28:00

+0

希望它更新得很好。 – 2009-09-13 15:22:02