在* nix中,许多接受文件名作为参数的命令行应用程序也接受管道。例如:
anApplication file.txt
也适用于
anApplication | anotherApplication arguments
“anotherApplication”的结果被重定向到“anApplication”,因为它是一个文件
我了解到相当于Windows的Windows是“命名管道”。我想知道命令行应用程序是否必须知道命名管道才能理解它,或者接受文件作为参数的任何命令行应用程序是否可以使用命名管道。
答案 0 :(得分:9)
你已经倒退了。准确地说:
anApplication file.txt
这将运行anApplication
,文件名为file.txt
作为第一个命令行参数。
anApplication | anotherApplication arguments
这运行anApplication
,没有命令行参数。标准输出连接到anotherApplication
的标准,它以arguments
作为命令行参数运行。这在Windows上与在Unix版本上完全相同。命名管道是完全不同的操作系统功能。
命名管道是一个看起来像文件的目录条目,但就像一个可以附加输出和输入的数据流。
答案 1 :(得分:4)
Windows上的named pipe与您所谈论的完全不同。命名管道实际上是一种帮助在Windows上构建服务器应用程序的工具,大致相当于“Unix域套接字”。
在您的情况下,anApplication
在这种情况下是否有效取决于应用程序在命令行上没有文件名时执行时的反应。 (我正在谈论你的描述中的安排;命令行是另一个答案所指出的。)如果应用程序在没有命令行的情况下从stdin
读取,那么这种shell管道安排将会工作。相反,如果应用程序打印一条帮助消息并在没有文件名的情况下启动时退出,那么这个shell管道将无效。
答案 2 :(得分:1)
AFAIK在Windows下的工作方式与在UNIX中相同。我想一些更高级的Win32控制台API函数可能会绕过它,但你必须阅读相关的文档。
答案 3 :(得分:1)
请注意,这是cmd.exe的语法。
这种管道重定向应该适用于任何程序,所以为了回答您的具体问题,如果它是标准的控制台应用程序,程序不需要特殊的代码。
有一点需要注意 - 如果程序通过运行时API的特殊键盘监控形式获取输入,则重定向将无效。