gpt4 book ai didi

c++ - 在 freopen 之后访问旧的标准输出?

转载 作者:行者123 更新时间:2023-11-28 03:31:57 29 4
gpt4 key购买 nike

我有一堆批处理文件,用程序 A 做这样的事情:

A > log.txt ; grep 'result:' log.txt > result.txt || raise_hell.sh

我想做的是修改 A,以便它在运行时打印一堆中间结果。但是,这并不像您想象的那么容易,因为 A 执行以下操作:

  • 调用 _freopen("somefile","w",stdout),然后
  • 在上百万处调用 printf(及其变体)并期望输出最终出现在某个文件中。

更改项目中的每个 printf 对我来说并不实际。更改每个批处理文件也不实际,所以我真的不知道我的输出被重定向到哪里。

理想情况下,我希望有一些方法可以获取标准输出的“原始值”,然后直接写在那里。 但是怎么做呢?我什至可以用其他东西替换对 freopen 的调用,只要输出仍然在它应该的地方结束。

换句话说,我希望 printf 最终出现在一个文件中,并以其他方式将内容打印到标准输出。

我已经尝试了很多事情,部分是基于对这个问题变体的回答。但是,这些都不起作用,因为它们仍然最终都写入了某个文件。欢迎提供帮助。

编辑:需要说明的是,这是在 Windows 上使用 Visual Studio 2010。

最佳答案

好吧,我不是 Windows 专家,只是作为对特定问题的回答:如何弄乱 w/stdout。在 UNIX 中,我们将使用 dup/dup2,它根据:

http://www.suacommunity.com/dictionary/dup-entry.php

在 Windows 中只是略有不同。 UNIX 中的基本思想是 stdout 是文件描述符 1...更改那里打开的内容等同于重定向它。使用 dup,您可以先复制它,以备不时之需。

不过,一般来说,我会将 stderr 用于进度消息...这就是它存在的原因。

关于c++ - 在 freopen 之后访问旧的标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12289380/

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