使用 freopen 将标准输入和输出重定向到某些文件(例如)后,如何将它们重定向回到最初的位置?
答案 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)并解除阻塞主进程(从未改变过)。这是间接的,但可能既便携又可以保证有效。