2009-07-11 88 views
0

在* nix中,许多接受文件名作为参数的命令行应用程序也接受管道。例如:何时在Windows中使用命名管道?

anApplication file.txt 

还与

anApplication | anotherApplication arguments 

与“anotherApplication”的结果,工作被重定向到“anApplication”,因为它是一个文件

我才知道,在Windows相当于本是一个“命名管道”。我想知道命令行应用程序是否必须知道命名管道才能理解它,或者是否有任何接受文件作为参数的命令行应用程序可以使用命名管道。

回答

9

你有这倒退。只是要精确:

anApplication file.txt 

这将运行anApplication的文件名file.txt作为第一命令行参数。

anApplication | anotherApplication arguments 

这运行anApplication没有命令行参数。标准输出连接到anotherApplication中的标准,该标准以arguments作为命令行参数运行。这在Windows上与在Unix版本上完全相同。命名管道是一个完全不同的操作系统功能。

命名管道是一个目录条目,看起来像一个文件,但就像你可以将输出和输入数据流。

1

AFAIK它在Windows下与UNIX中的一样。我想一些更高级的Win32控制台API函数可能会绕过这个,但是你必须阅读它的文档。

1

请注意,这是cmd.exe的语法。

这种管道重定向应该适用于任何程序,这样回答您的具体问题,如果程序是标准控制台应用程序,程序不需要特殊代码。

有一个警告 - 如果程序通过运行时API的特殊键盘监控形式获得输入,则重定向将不起作用。

4

在Windows上一个named pipe比你在说什么一个非常不同的事情。命名管道实际上是帮助在Windows上构建服务器应用程序的工具,并且大致等同于“Unix域套接字”。

在你的情况,anApplication作品在这种情况下,是否依赖于应用程序时没有在命令行上的文件名执行如何反应。 (我正在讨论你的描述中的排列方式;命令行是由另一个答案指出的。)如果应用程序在没有命令行的情况下从stdin中读取,那么这种外壳管道排列将起作用。相反,如果应用程序打印帮助消息并在没有文件名的情况下退出,那么这个shell管道将不起作用。