c程序不接受已解析的输入

时间:2014-01-21 15:07:21

标签: c bash

您好我有一个c程序,它接收两个数字并添加它们。非常简单,只是在这里学习c。但是我有一个带有两个列的csv文件,我用bash脚本解析过,并且在c程序中输入管道不会产生结果。例如,如果我手动输入:

$ ./adder 1 2
$ 3

然后我的bash程序解析如下

$ ./parser test.csv 
$ 1 2

目前csv文件中只有一行。即与之前完全相同的c文件输入

然后做:

$ ./parser | ./ adder
$

我没有结果。

这里发生了什么?

3 个答案:

答案 0 :(得分:5)

使用$ ./adder 1 2,您将1 2作为命令行参数传递给程序,argv[]中提供了这些参数。

但是$ ./parser | ./ adder parser的输出作为输入传递给adder,即如果adder尝试从标准输入读取 - stdin(使用函数)比如scanfgets等),它会将其作为输入。

如果您的程序没有从标准输入读取,则不会获得这些。

如果你想让它工作,在linux上使用xargs作为

 $ ./parser | xargs ./adder

答案 1 :(得分:1)

看起来adder在命令行中接受数字,而在管道中,您尝试在标准输入中提供数字。你应该能够用xargs实现你想要的东西:

./parser | xargs ./adder

答案 2 :(得分:0)

您应该尝试使用xargs将一个程序的输出读入下一个程序的命令行。

管道将 stdout 重定向到 stdin 。 stdin与在命令行中输入参数不同。 xargs允许您将stdin(由管道创建)转换为命令行参数。试试这个:

./parser | xargs ./adder

您可以在心理上将其理解为:“解析器的输出用作加法器的参数。”