【发布时间】:2013-09-05 06:14:22
【问题描述】:
我找到了几个答案,但它们似乎与 Windows 机器特别相关。 所以我的问题是管道和套接字之间有什么区别,以及何时/如何选择一个而不是另一个?
【问题讨论】:
标签: networking tcp network-programming
我找到了几个答案,但它们似乎与 Windows 机器特别相关。 所以我的问题是管道和套接字之间有什么区别,以及何时/如何选择一个而不是另一个?
【问题讨论】:
标签: networking tcp network-programming
管道和套接字之间有什么区别,何时/如何选择一个而不是另一个?
管道和套接字都处理字节流,但它们以不同的方式处理......
用法:
read() 和 write() 连接到管道。【讨论】:
要完成 Mike 给出的答案,重要的是要提到 UNIX 域套接字的存在,它在任何 POSIX 兼容的操作系统上都可用。尽管在使用语义方面与“普通”互联网套接字非常相似,但它们纯粹是机器本地的(当然互联网套接字也可以在本地工作),因此几乎表现得像管道。几乎,因为 UNIX 管道根据定义是单向的:
管道和 FIFO(也称为命名管道)提供单向 进程间通信通道。管道有一个读端和一个写端 结尾。写入管道写端的数据可以从读端读取 管道的末端。 (摘自man page pipe(7))
UNIX 域套接字也有一个非常不寻常的特性,因为除了数据之外,它们还允许发送文件描述符:这样,非特权进程可以访问其描述符已通过套接字发送的任何文件。根据维基百科,这种技术被 ClamAV 防病毒扫描守护进程使用。
【讨论】: