Windows和Linux中的管道有什么区别?
答案 0 :(得分:21)
我所知道的一个区别是,Linux下的命名管道是文件系统中的实际条目(您将在目录列表中看到它们,它们具有特殊类型),而在Windows上它们存储在一些神奇的存储库中某处(它们都是通过“\\。\ pipe \”路径访问的。
其次,在Linux中,您可以使用标准文件IO方法从管道写入/读取,就好像它们是任何其他文件一样。而在Windows上,您必须使用特殊的“管道”功能,它们是Win32 API的一部分。
我更喜欢linux的方法,因为它允许我使用任何我想要的应用程序的管道。例如:
mkfifo pipe.wav
decodeMP3 song.mp3 --out pipe.wav &
encodeAVI video.mpeg pipe.wav --out video.avi
这让我可以将MP3解码器的输出直接输入视频解码器,而不必先将整个MP3解码为磁盘上的WAV文件。如果你有一个双核CPU,这很方便,因为那时你同时运行两个操作,以获得更好的加速。
答案 1 :(得分:5)
在Linux下(和* ix一般),“一切都是文件”。您可以无限制地读/写/寻找管道和插座以及设备,只要这些操作有意义。
虽然Windows对这些不同类型的对象的统一架构要少得多。虽然我无法告诉你细节,但我知道Windows和Linux之间的管道缓冲有很大的不同,所以你可能会遇到困难。
此外,一个常见的Unix-y管道使用是fork()
一个子进程,然后通过管道与它通信(父进程打开一端,子进程打开另一端)。在Windows下,这种事情是不可能的。 IPC机制完全不同。
答案 2 :(得分:3)
答案 3 :(得分:2)
另一个重要的区别
在Windows下
A | B | C
直到A完成它的输出B没有开始读取,C读取的输出相同
* nix将输入和输出挂钩在一起,这样C可以读取B的输出,B可以在A和B仍在运行时读取A的输出
吞吐量大致相同,但使用* nix时输出显示得更快。