gpt4 book ai didi

c++ - 使用 freopen 后如何恢复标准输出

转载 作者:可可西里 更新时间:2023-11-01 15:24:59 29 4
gpt4 key购买 nike

我尝试使用以下命令从标准输出重定向我的 C++ 程序中的输出:

 freopen(cmd.c_str(),"w",stdout);    

然后调用system执行cmd。我也尝试过 fork 然后调用 execvp。无论哪种方式,当程序控制返回到我的程序时,写入 stdout 的内容将不再显示。如何恢复正常行为?

最佳答案

这里是 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;
}
.
.

}

关于c++ - 使用 freopen 后如何恢复标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5846691/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com