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

Redirecting standard I/O: freopen + stdin/stdout vs open + dup2

本文关键字:stdin stdout vs dup2 open freopen 标准 重定向      更新时间:2023-10-16

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

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

stdin上的

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