我正在将一些遗留代码导入iOS应用程序,该应用程序使用stdout进行某些诊断输出。当然,iOS does not like you to write to stdout at all,我还是需要得到那个输出。我想将此输出重定向到一个文件,然后再次使用相同的遗留代码,将输出重定向到另一个文件。有谁知道这样做的方法?
我尝试过简单化的
freopen(p, "w", stderr);
这确实有效 - 但只有一次。使用此调用后,stdout的所有输出将永远重定向。没关系,但后续调用将输出重定向到新位置会导致系统不稳定,最终导致崩溃。 (我已经测试了这个从XCode运行,但不是直接从重启的iPad运行。我不确定如果不使用DEBUG模式在XCode中运行,则不稳定性仍然存在。)
我也尝试了this post中的方法。这也有效,但不会将系统恢复到原始状态,而且只能运行一次。 (如果您在家中尝试此操作,请包含Apple的<unisys.h>
而不是<io.h>
,并将_
与_dup
和_dup2
之类的电话保持一致。)
我真的不想通过代码并替换printf
等的所有用法来使用显式文件。除了耗时,容易出错和丑陋之外,代码也是开源的。我不希望原作者会欣赏我的更改,并且我不希望每次更新原始项目时都必须重新集成更改。
思想?