我有一个可执行文件(fossil scm),我的程序通过:: CreateProcess windows调用从外部调用。然后捕获stdout和stderr。由于化石的源代码可用,我宁愿用它创建一个静态库并直接发出调用。目前,通过命令行参数完成与化石的通信,并且通过进程返回代码,stdout和stderr进行通信。 Fossil通过printf和fprintf调用写入stdout / err。
以最少的化石来源改变来解决这个问题的最佳方法是什么?是否有一种可靠的跨平台方法来拦截stdout / err并将其发送到内存缓冲区?
答案 0 :(得分:3)
你说你想要
拦截stdout / err并将其发送到 内存缓冲区
这表明您不想为SCM程序引入API,而是希望在不更改现有代码的情况下继续解析文本输出。如果是这样,那么我认为改变现有方法是没有意义的。通过当前方法使用内存缓冲区和静态链接可以获得什么?
答案 1 :(得分:3)
您可以按照以下步骤执行此操作:
freopen("filename.out", "w", stdout);
但请注意,这很脆弱:
一般来说,你可以做到这一点,但除非你有充分的理由(即表现)并且你已经准备好面对后果并自己修复错误。
答案 2 :(得分:0)
将化石转变为共享库,然后使用自定义程序中的库。