重定向标准I / O:freopen + stdin / stdout vs open + dup2

时间:2012-12-23 21:04:40

标签: c++ linux unix io-redirection

我想将stdin / stdout重定向到某个文件。该程序是为Unix OS编写的,但我认为使用标准的C / C ++库而不是OS函数是好的。我知道如何使用操作系统函数dup2()open()来做到这一点,但我在reopen()stdin上使用stdout阅读了一些方法。将重新开放的标准变量做到我想要的吗?它会替换以0和1文件描述符打开的文件吗?哪种方式更好?

1 个答案:

答案 0 :(得分:1)

由于您正在编写自己的shell,我将使用dup2()和open()的低级函数。

stdin上的

freopen()将关闭原始stdin,并在stdin位置打开你要求的文件 - 所以你现在已经丢失了stdin。如果你使用open()和dup2()来替换文件句柄0或1,当然 - 你仍然会丢失原始的stdin,所以只有在你分叉后才这样做。