在查看一个名为socket的unix后,我认为它们被命名为管道。我看着名字管道并没有看到太大的区别。我看到它们的初始化方式不同,但这是我唯一注意到的事情。两者都使用C写/读功能,并且类似于AFAIK。
unix域套接字和命名管道之间的区别是什么?我何时会选择一个而不是另一个?默认情况下我应该使用哪个(比如我在C ++中默认使用向量而不是使用deque,list或其他任何我需要的东西)?
答案 0 :(得分:91)
UNIX-domain套接字通常比命名管道更灵活。它们的一些优点是:
要使用其中许多功能,您需要使用send()
/ recv()
系列调用,而不是write()
/ read()
。
答案 1 :(得分:60)
一个区别是命名管道是单向的,因此您需要使用其中两个才能进行双向通信。套接字当然是双向的。使用两个变量而不是一个变量(即两个管道而不是一个套接字)似乎稍微复杂一些。
此外,维基百科文章在the following point上非常清楚:“Unix域套接字可以创建为字节流或数据报序列,而管道只是字节流。”