在c ++中实现FILE指针

时间:2014-03-21 07:42:39

标签: c++ c

我在我的C ++项目中使用C库。对于日志记录,C库要求我定义一个FILE指针来获取日志,例如:

extern "C"
{
    FILE *pFileStdErr = stderr;
}

这将使日志显示在控制台窗口中。

然而我真正想要的是用我的C ++类方法从C库中捕获日志,即

extern "C"
{
    FILE *pFileStdErr = ???;
}

void CMyClass::Log (std::string error)
{
    m_myLogger.LogError(error);
}

那么如何将它“粘合”在一起呢?

2 个答案:

答案 0 :(得分:1)

GNU上有一个非标准的扩展名:fopencookie()。有了它,您可以自己定义FILE的行为。

即使您不使用GNU,您的环境也可能会提供类似的内容。

但要注意,如果你这样做,你就会失去便携性。

答案 1 :(得分:0)

您可以使用pipe函数(在Windows上为_pipe)创建一个管道,然后在返回的描述符上使用fdopen来获取FILE *指针。然后,您可以将管道的写入端设置为库的FILE *指针,并从类中管道的读取端读取。