c++ - 如何将 stderr 与输出流相关联

标签 c++ windows stderr

当我尝试获取 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/

相关文章:

windows - 如何在 Linux 上设置私有(private) git 服务器

c++ - 将 stderr 重定向到临时文件

c++ - 无法使用 MinGW C++ 在 NetBeans IDE 7.3 中编译 "Hello World"

c++ - 有人可以用更好的逻辑编写这段代码吗?

windows - 批处理文件中的 CSV 格式

python - 导入模块时抑制 scapy 警告消息

bash - 将输出重定向到终端

c++ - 在 C++ 中使用方法作为变量

c++ - 如何在自动循环中使用 s.end() 之类的东西?

python - urllib.request.urlopen:SSL:Windows> = Vista(7/8/10/Server 2008)在Windows> = 3.4上的Windows上的SSL:CERTIFICATE_VERIFY_FAILED错误