终端重定向的顺序是什么?

时间:2013-10-09 15:04:17

标签: linux terminal

我想从文件input.txt获取输入并将执行输出写入output.txt什么是正确的顺序?以下不起作用。

./a.out < input.txt > output.txt

修改

我是否必须等待执行完成才能写入?我通常在中间打破,看看o / p是否正在写入,因为运行时间非常长。

澄清:

此C程序(P1)循环遍历循环并将循环值x提供给system()调用,该调用使用./P2 < x调用另一个C程序(P2)。程序P2对x的每个值执行并输出到屏幕。我想将两个程序的完整输出输出到output.txt。

1 个答案:

答案 0 :(得分:2)

如果您在命令完成之前终止该命令,这可能是一个缓冲问题。行缓冲终端输出和块缓冲文件输出是C stdio库中的默认行为,因此重定向可以导致输出被缓冲,直到写入几千字节为止。

某些程序有一个命令行选项来强制行缓冲或无缓冲输出。他们通过致电setvbuf来做到这一点。如果a.out是您编写的程序,则可以添加setvbuf(stdout, NULL, _IOLBF, 0);

如果该程序不是您的,并且您无法重新编译它,那么有一个名为stdbuf的实用程序可能有所帮助,如stdbuf -oL ./a.out < in > out

stdbuf虽然是一种kludge。除非没有其他选择,否则我不会使用它。