程序输出重定向问题

时间:2011-03-24 19:48:40

标签: c linux bash

我应该将以下命令放在C程序的系统函数参数中。

$ timed-run 20 prog1 1 1>/dev/null 2>abc.dat

timed-run应该执行prog1最多20秒,然后终止它。我希望将prog1的输出重定向到abc.dat。对此有什么解决方案吗?

谢谢

3 个答案:

答案 0 :(得分:1)

当您编写“1> / dev / null”时,您将程序的输出重定向到位桶。 (也就是说,你要丢弃它。)如果你改写“1> filename”,输出将转到指定的文件。

答案 1 :(得分:1)

对于重定向子进程输出,有几种方法,以下2是最重要的方法:

  1. popen()(易于理解和使用,但popen仅适用于stdout of child,但你可以通过附加到命令行字符串“2>& 1”将stderr重定向到stdout)
  2. pipe fork和exec trio会帮助你(有很多关于这个功能的信息在互联网上)

答案 2 :(得分:1)

我怀疑,但是如果没有看到prog1源代码就无法知道,prog1没有刷新其输出缓冲区。也就是说,它的代码如下:

i = 42;
fprintf(stderr, "result: %d\n", i);

格式化的输出(即“结果:42 \ n”)存储在stderr的输出缓冲区中,等待写入的机会。但是,在此之前,timed-run会用信号杀死prog1

您的选择是定期调用fflush(stderr),更改缓冲类型(使用setbufsetvbuf),或捕获信号并在程序终止时调用fflush(stderr)