作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试获取 stderr
的文件描述符时与 fileno(stderr)
,结果是 -2 而不是 2。 fileno 的文档说这可能是因为在没有控制台窗口的 Windows 应用程序中 stderr
与输出流无关。
我需要 stderr
文件描述符,因为我想重定向 stderr
管道使用 _dup2() , 所以用 fprintf(stderr, "...")
写的所有东西和 std::cerr << "..."
将被重定向到管道。
我的问题是是否可以获得stderr
的文件描述符?在 gui 应用程序中,哪里没有控制台窗口?我能以某种方式打开默认的 stderr
吗?调用前的文件描述符 fileno(stderr)
?
编辑:
我设法让它能够重定向 fprintf(stderr, "...")
通过首先调用管道 freopen("temp.txt", "w",stderr)
然后调用fileno(stderr)
根据@darune 提出的想法获取文件描述符。
我想这样做,因为我想从不受我控制的外部库重定向数据。
最佳答案
std::cerr
可以在您的程序内重定向,但 stderr
不能(至少不能以我所知道的任何可移植或标准方式)。
可以先用std::freopen之后可以使用 std::_fileno()
获取有效的文件描述符。这可能不够,也可能不够,所以如果在那之后你需要发生任何其他事情,你将不得不从你自己的程序内部监视文件(例如,ala。拖尾文件)并进行自定义处理。
关于c++ - 如何将 stderr 与输出流相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53280299/
我是一名优秀的程序员,十分优秀!