相关疑难解决方法(0)

关闭它们后重新打开stdout和stdin文件描述符

我正在编写一个函数,在给定参数的情况下,它会将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)

c unix linux

32
推荐指数
2
解决办法
5万
查看次数

如何创建自己的ostream/streambuf?

出于教育目的,我想创建一个ostream和流缓冲区来做:

  1. 做<< myVar时修复endians;
  2. 存储在deque容器中而不是使用std:cout或写入文件
  3. 记录额外的数据,例如我做了多少次<<,我做了多少次.write,我写的字节数和flush()的次数.但我不需要所有的信息.

我尝试过载,但失败的可怕.我试着通过写入来重载

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)但是我还需要重载多少?以及如何构建我的类(它需要继承什么等)?

c++ ostream streambuf

22
推荐指数
2
解决办法
2万
查看次数

标签 统计

c ×1

c++ ×1

linux ×1

ostream ×1

streambuf ×1

unix ×1