我尝试使用以下内容从stdout重定向我的c ++程序中的输出:
freopen(cmd.c_str(),"w",stdout);
然后我调用system来执行cmd。我也尝试过分叉然后调用execvp。无论哪种方式,当程序控制返回到我的程序时,写入stdout的内容不再显示。如何恢复正常行为?
答案 0 :(得分:3)
这里是stdin的解决方案,如果进行循环,需要计算出一个程序,其中stdin的freopen在一些条件下循环发生。花了一些时间让我弄清楚(借助搜索和所有)并在此处发布
savestdin = dup(STDIN_FILENO);
while (1) {
.
.
if (inputfile) {
savestdin = dup(savestdin);
freopen(inputfile, "r", stdin);
restorestdin = TRUE;
}
.
.
if (restorestdin) {
fflush(stdin);
fclose(stdin);
stdin = fdopen(savestdin, "r");
restorestdin = FALSE;
}
.
.
}
答案 1 :(得分:1)
这样做:
fclose(stdout);
stdout = fdopen(1, "w"); //reopen: 1 is file descriptor of std output
如果您可以使用<unistd.h>
中的STDOUT_FILENO而不是1
作为fdopen
的第一个参数。