gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:29:41 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com