Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C++中重定向标准流回到控制台和键盘_C++ - Fatal编程技术网

在C++中重定向标准流回到控制台和键盘

在C++中重定向标准流回到控制台和键盘,c++,C++,将标准输入和输出重定向到某些文件(例如使用freopen)后,如何将它们重定向回最初的位置?您不能,因为基础文件描述符已关闭。但在windows上,您可以尝试打开与控制台相对应的特殊文件CON。您可以使用id=fcntlblah,F_DUPFD,0复制/克隆初始FD,然后在关闭stdin后使用dup20,id将其复制回来!,然后使用fdopen重新打开文件。对其他人重复。然而,这可能并不能准确地满足您的需求——它会为您提供一个与fd0关联的随机文件句柄,而不是更改“stdin” 另一种丑陋的选择

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

您不能,因为基础文件描述符已关闭。但在windows上,您可以尝试打开与控制台相对应的特殊文件CON。

您可以使用id=fcntlblah,F_DUPFD,0复制/克隆初始FD,然后在关闭stdin后使用dup20,id将其复制回来!,然后使用fdopen重新打开文件。对其他人重复。然而,这可能并不能准确地满足您的需求——它会为您提供一个与fd0关联的随机文件句柄,而不是更改“stdin”

另一种丑陋的选择是产生一个隐式复制stdin/etc的线程,重新打开它们,进行处理,然后退出线程关闭重新打开的stdin/etc,取消阻止从未更改的主进程。这是间接的,但可能是便携式的,并保证工作