c++ - 如何集成开源 C 程序而不是通过系统调用调用其可执行文件?

标签 c++ c system fossil

我有一个可执行文件 (fossil scm),我的程序通过::CreateProcess 窗口调用从外部调用它。然后捕获 stdout 和 stderr。由于 fossil 的源代码可用,我更愿意从中创建一个静态库并直接发出调用。目前,与 fossil 的通信是通过命令行参数完成的,而返回的通信是通过进程返回码、stdout 和 stderr。 Fossil 通过 printf 和 fprintf 调用写入 stdout/err。

以最少的化石来源改变来解决这个问题的最佳方法是什么?是否有一种可靠的跨平台方式来拦截 stdout/err 并将其发送到内存缓冲区?

最佳答案

你说你想

intercept stdout/err and send it into a memory buffer

这表明您不想为 SCM 程序引入 API,而是希望在不更改现有代码的情况下继续解析文本输出。如果是这样,那么我认为改变您当前的方法毫无意义。在当前方法上使用内存缓冲区和静态链接到底能获得什么?

关于c++ - 如何集成开源 C 程序而不是通过系统调用调用其可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4531196/

相关文章:

c++ - 无法将参数 'std::basic_string<char>' 的 'const char*' 转换为 '1' 到 'int system(const char*)'

c++ - 根据对象的成员函数从 vector 中删除对象

c - 在运行错误代码之前出现段错误

objective-c - 如何 append 到 Objective c 中的 char 数组

timer - 组装CPU测频算法

eclipse - 如何导入另一个 .py 文件的所有导入

c++ - Visual Studio C++ 2013 调试器不稳定的步骤行为

c++ - 令人困惑的 C++ 情况

c++ - QTableView列宽可调

c - fopen 不会打开文件,通过 fgets 提供完整路径