在c++中实现FILE指针

Implementing FILE pointer in c++

本文关键字:FILE 指针 实现 c++      更新时间:2023-10-16

我在我的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);
}

那么我如何把这些"粘合"在一起呢?

在GNU: fopencookie()上有一个非标准扩展。这样,您就可以自己定义FILE的行为。

即使您没有使用GNU,您的环境也可能提供类似的东西。

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