我正在编写一个函数,根据给定的参数,将stdout重定向到文件或从文件中读取stdin。为了实现这一点,我关闭与stdout或stdin关联的文件描述符,这样当我打开文件时,它会在我刚刚关闭的描述符下打开。这个方法是有效的,但问题是一旦完成这个操作,我需要将stdout和stdin恢复到它们真正应该是的状态。
对于stdout,我可以使用
所以,对于stdout,我有以下解决方案:
对于stdout,我可以使用
open("/dev/tty",O_WRONLY);
,但我不确定为什么这样可以,更重要的是,我不知道stdin的等效语句。所以,对于stdout,我有以下解决方案:
close(1);
if (creat(filePath, O_RDWR) == -1)
{
exit(1);
}
和标准输入
close(0);
if (open(filePath, O_RDONLY) == -1)
{
exit(1);
}
O_RDWR
用于open
函数的flags
参数,而非creat
函数的mode
参数。 - Werner Henze