我找到了几个答案,但它们似乎与Windows机器有关。 所以我的问题是管道和插座之间的区别是什么,何时/如何选择一个而不是另一个?
答案 0 :(得分:65)
管道和套接字之间有什么区别,何时/如何选择其中一个?
管道和套接字都处理字节流,但它们以不同的方式处理...
用法:
read()
和write()
为管道。答案 1 :(得分:20)
要完成Mike提供的答案,请务必提及UNIX域套接字的存在,这些套接字可在任何符合POSIX的操作系统上使用。虽然非常类似于"正常"在使用语义方面的互联网套接字,它们纯粹是机器本地的(当然互联网套接字也可以在本地工作),因此几乎像管道一样。几乎是因为根据定义,UNIX管道是单向的:
管道和FIFO(也称为命名管道)提供单向 进程间通信通道。管道具有读取结束和写入 结束。可以从读取中读取写入管道写入端的数据 管道的尽头。 (摘自man page pipe(7))
UNIX域套接字也有一个非常不寻常的功能,除了数据之外,它们还允许发送文件描述符:这样,非特权进程可以访问其描述符已通过套接字发送的任何文件。根据维基百科的说法,这种技术被ClamAV防病毒扫描守护程序使用。