我正在编写一个函数,在给定参数的情况下,它会将stdout重定向到文件或从文件中读取stdin.为此,我关闭与stdout或stdin关联的文件描述符,这样当我打开文件时,它会在我刚刚关闭的描述符下打开.这是有效的,但问题是,一旦完成,我需要将stdout和stdin恢复到它们真正应该是什么.
我能为stdout做的是打开("/ dev/tty",O_WRONLY); 但我不确定为什么会这样,更重要的是我不知道stdin的等价语句.
对于stdout,我有
close(1);
if (creat(filePath, O_RDWR) == -1)
{
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
和斯坦丁
close(0);
if (open(filePath, O_RDONLY) == -1)
{
exit(1);
}
Run Code Online (Sandbox Code Playgroud) 出于教育目的,我想创建一个ostream和流缓冲区来做:
我尝试过载,但失败的可怕.我试着通过写入来重载
ostream& write( const char* s, streamsize n )
Run Code Online (Sandbox Code Playgroud)
在我的basic_stringstream2类中(我复制粘贴basic_stringstream到我的cpp文件并修改它)但代码保持使用basic_ostream.我查看了代码,看起来我需要重载xsputn(这个页面上没有提到http://www.cplusplus.com/reference/iostream/ostream)但是我还需要重载多少?以及如何构建我的类(它需要继承什么等)?