【发布时间】:2012-02-12 06:08:44
【问题描述】:
我有用 C 编写的代码,我正在努力创建一个库,我可以从中访问其他语言的函数。
我目前正在为此代码编写一个 C++ 客户端,以确定需要进行哪些更改才能支持将我的库包含到 C++ 应用程序中。
通常,基于 C 的二进制文件会分析一些输入,然后通过一系列 fprintf 语句将其数据输出到 stdout。
有没有办法将相关 C 函数的输出重定向到stdout?
我不是 C++ 专家,但我想我想做的是提供一个 C++ 输出流缓冲区的子类(ostream 和 ofstream?),它包含相同的输出,否则会被发送通过相关的 C 函数到stdout。
如果可能,我希望选择将此数据重定向到文件流或 C++ 应用程序中的标准输出。
我该怎么做?我可以保留我的 C 代码原样并从 C++ 代码中重定向 stdout 吗?
编辑
我可以编辑相关的 C 函数,以便将文件指针或描述符作为参数。这会有所帮助吗,能够传递输出的去向?我不清楚的是如何翻译 C++ IO 和 C IO。我不能将 C++ iostream 传递给 C 函数,或者我可以吗?
【问题讨论】:
-
在某些系统(尤其是 Linux)上,来自 C 的
stdout和来自 C++ 的std::cout是“同步的”。并且您始终可以在 C++ 代码中使用<cstdio>标头来获得stdout的 C 概念。 -
因此,如果我设置
FILE *fp = stdout并有一个 C 函数foo(FILE *fp)将数据吐出到stdout,那么我将如何将输出从std::cout重定向到输出流(仍然)std::cout还是文件输出流? -
一个 C 函数不知道 C++
std::cout!但见gcc.gnu.org/onlinedocs/gcc-4.6.2/libstdc++/manual/manual/… -
您使用的是 Unix / Linux / MacOS 吗?此外,仅将标准输出重定向到文件而不是以某种方式将其与 C++ 流组合就足够了吗?
-
如何将套接字的一端传入库中,然后简单地写入该套接字并在客户端再次读取它?