Windows和Linux中的管道有什么区别?
我所知道的一个区别是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,这很方便,因为那时你同时运行两个操作,以获得良好的加速.
在Linux下(和*ix一般),"一切都是文件".只要这些操作有意义,您就可以无限制地读/写/寻找管道和插座以及设备.
而Windows对于这些不同类型的对象具有远不那么统一的架构.虽然我无法告诉你细节,但我知道Windows和Linux之间的管道缓冲有很大不同,所以你可能会遇到困难.
此外,一个常见的Unix-y管道使用是fork()
对子进程,然后通过管道与它通信(父进程打开一端,子进程打开另一端).在Windows下,这种事情是不可能的.IPC机制完全不同.