1

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

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

编辑

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

澄清:

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

4

1 回答 1

2

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

一些程序有一个命令行选项来强制行缓冲或非缓冲输出。他们通过调用setvbuf. 如果那a.out是您编写的程序,您可以添加setvbuf(stdout, NULL, _IOLBF, 0);

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

stdbuf虽然有点杂乱无章。除非没有其他选择,否则我不会使用它。

于 2013-10-09T15:31:40.387 回答