我有一些代码,我将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
。
任何进一步调试的帮助,或提示非常赞赏。
答案 0 :(得分:1)
如果没有源代码,很难说出错了。
在您致电stdout
之前,似乎您的“还原” system()
尚未完成。
我想到的是使用exec
系列而不是system
因为exec
知道您的进程在调用外部程序时所持有的文件描述符。 (虽然在这种情况下,文件描述符将被关闭。)