重定向stdout时删除了日志文件

时间:2012-04-29 17:38:58

标签: c unix

我有一些代码,我将stdout重定向到logfile(通常为dup, open, and dup2),然后还原stdout。只要我有一些C代码,这样就可以正常工作 介于两者之间,当我调用system()并执行一些shell/perl脚本时,我发现logfile在执行结束时被删除了! (被调用的脚本没有logfile名称,并且不执行任何unlink) 我可以看到logfile正在编写,而脚本正在执行。

代码块是这样的:

 /redirect-stdout-to-logfile/
  system(scripts);
  /reset-stdout/

我想将stdout的所有邮件捕获到logfile。 任何进一步调试的帮助,或提示非​​常赞赏。

1 个答案:

答案 0 :(得分:1)

如果没有源代码,很难说出错了。

在您致电stdout之前,似乎您的“还原” system()尚未完成。

我想到的是使用exec系列而不是system因为exec知道您的进程在调用外部程序时所持有的文件描述符。 (虽然在这种情况下,文件描述符将被关闭。)