[英]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.