使用C ++将标准流重定向回Console和Keyboard

时间:2011-03-15 18:43:09

标签: c++

使用 freopen 将标准输入和输出重定向到某些文件(例如)后,如何将它们重定向回到最初的位置?

2 个答案:

答案 0 :(得分:0)

您不能,因为基础文件描述符已关闭。但是在Windows上你可以尝试打开特殊文件“CON”,它对应于控制台。

答案 1 :(得分:0)

您可以使用id = fcntl(blah,F_DUPFD,0)复制/克隆初始FD,然后使用dup2(0,id)将其复制回来(关闭stdin之后!),然后使用fdopen()重新打开文件。重复其他人。然而,这可能无法让你得到你想要的东西 - 它会得到一个与FD 0相关的随机文件句柄,而不是改变'stdin'。

另一种丑陋的选择是产生一个线程(隐式重复stdin / etc),fdreopen它们,进行处理,然后退出线程(关闭重新打开的stdin / etc)并解除阻塞主进程(从未改变过)。这是间接的,但可能既便携又可以保证有效。