繁体   English   中英

使用stdin和stdout管道到同一C程序

[英]Piping to same c program using stdin and stdout

假设我有一个名为myProgram的可执行文件,该可执行文件从输入文件读取并写入输出文件。 该程序的命令行如下所示:

./myProgram -o outputfile inputfile

-o选项的参数指定输出文件名; 如果不存在这样的文件,则程序将创建它。

我想知道的是我是否可以多次执行myProgram,将一个实例的输出传递到下一个实例的输入。 例如,

./myProgram inputfile | ./myProgram -o outputfile

是否有可能实现这一目标,如果是这样,我将必须执行什么? exec调用和分叉? 只是简单的读写调用?

管道通过将多个程序的stdin和stdout链接在一起来工作。

您需要修改程序以具有从stdin读取并写入stdout而不是特定文件的能力。 然后,您可以使用管道。

简短的答案是:是的,您可以这样做。

但是,您的程序然后应从stdin读取其输入并写入stdout。 这意味着不再需要将参数作为输入或输出文件。

./myProgram < inputfile > outputfile

或者,为了说明链接,

./myProgram < inputfile | ./myProgram > outputfile

如果未指定输入文件,则广泛使用的组合是从stdin读取,如果未在命令行中传递outputfile outputfile“-”,则写入stdout。 这提供了最大的灵活性。

话虽如此,链接同一程序的多个实例是否明智,当然很大程度上取决于该程序的功能 例如,对于排序程序,这似乎没有多大意义;)

与使用命令一起运行程序myProgram的两个实例绝对没有问题

./myProgram inputfile | ./myProgram -o outputfile

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM