繁体   English   中英

程序的输出重定向问题

[英]Problem with program's output redirection

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

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

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

谢谢

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

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

  1. popen()(易于理解和使用的方法,但是popen仅适用于child的stdout,但是您也可以通过附加到命令行字符串“ 2>&1”将stderr重定向到stdout)
  2. 管道前叉和exec三重奏将为您提供帮助(互联网上有很多有关此功能的信息)

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM