使用stdin和stdout管道到相同的c程序

时间:2017-11-17 15:55:06

标签: c unix command-line pipe

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

./myProgram -o outputfile inputfile

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

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

./myProgram inputfile | ./myProgram -o outputfile

是否有可能实现这一目标,如果是这样,我还需要实施什么?执行电话和分叉?只是简单的读写调用?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

简短的回答是:是的,你可以这样做。

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

./myProgram < inputfile > outputfile

或者,为了说明链接,

./myProgram < inputfile | ./myProgram > outputfile

如果没有指定输入文件,广泛传播的组合是从stdin读取,如果没有outputfile outputfile&#34; - &#34;则写入stdout。在命令行传递。这提供了最大的灵活性。

话虽如此,如果链接同一程序的多个实例是明智的,当然主要取决于该程序做什么。例如,对于分类程序,这当然没有多大意义;)

答案 2 :(得分:1)

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

./myProgram inputfile | ./myProgram -o outputfile