我想将stdin / stdout重定向到某个文件。该程序是为Unix OS编写的,但我认为使用标准的C / C ++库而不是OS函数是好的。我知道如何使用操作系统函数dup2()
和open()
来做到这一点,但我在reopen()
或stdin
上使用stdout
阅读了一些方法。将重新开放的标准变量做到我想要的吗?它会替换以0和1文件描述符打开的文件吗?哪种方式更好?
答案 0 :(得分:1)
由于您正在编写自己的shell,我将使用dup2()和open()的低级函数。
stdin上的freopen()将关闭原始stdin,并在stdin位置打开你要求的文件 - 所以你现在已经丢失了stdin。如果你使用open()和dup2()来替换文件句柄0或1,当然 - 你仍然会丢失原始的stdin,所以只有在你分叉后才这样做。