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



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

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

编辑

我是否必须等待执行完成才能写入?我通常会在中间中断以查看 o/p 是否被写入,因为运行时间非常高。

澄清:

这个 C 程序 (

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

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

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

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

不过,stdbuf有点笨拙。除非没有其他选择,否则我不会使用它。

最新更新