unix域套接字VS命名pipe道?

看了一个名为套接字的unix后,我以为他们被命名为pipe道。 我看着名字pipe,并没有看到太多的区别。 我看到他们被初始化不同,但那是我唯一注意到的。 两者都使用C写/读function,并像AFAIK一样工作。

什么是unix域套接字和命名pipe道之间的区别? 我什么时候会select一个呢? 我应该默认使用哪个(比如我如何在C ++中使用使用向量,而不是使用deque,list或其他什么,如果我有需要)?

UNIX域套接字通常比命名pipe道更灵活。 他们的一些优点是:

  • 你可以使用它们进行两个以上的进程通信(例如一个服务器进程可能有多个客户进程连接);
  • 它们是双向的;
  • 它们支持在进程之间传递内核validation的UID / GID凭证;
  • 它们支持在进程之间传递文件描述符;
  • 它们支持数据包和序列数据包模式。

要使用其中的许多function,您需要使用send() / recv()系列调用,而不是write() / read()

一个区别是命名pipe道是单向的,所以你需要使用其中的两个才能进行双向通信。 套接字当然是两种方式。 使用两个variables而不是一个(也就是两个pipe道而不是一个套接字)似乎稍微复杂一点。

而且,维基百科的文章在以下几点非常明确:“Unix域套接字可以创build为字节stream或数据报序列,而pipe道只能是字节stream。