【发布时间】:2017-07-16 18:05:57
【问题描述】:
我想将一个 C 库集成到我的 C++/Qt 项目中。该库接受 FILE* 流以打印调试消息(而不是为日志回调函数提供挂钩...)。
如果我只通过stderr,它可以正常工作,但我想将它集成到我自己的日志基础设施中,它使用qDebug() 和 co。
我最初的想法是使用socketpair(),获取发送方fd的FILE*流,将其传递给库,并使用QSocketNotifier处理接收方,但我遇到了两个问题:
- 虽然有适用于 Windows 的实现,但它不是多平台的。
- 我的应用程序是单线程的(我希望保持这种状态),这意味着套接字对的 2 个套接字是从同一个线程写入和读取的。这似乎会在一段时间后陷入僵局。
还有哪些其他方法可以提供 FILE* 流,将其读取集成到 Qt 的事件循环中,不需要多线程,并且是多平台的?
【问题讨论】:
-
它是一个公共的 C 库吗?如果是,是哪一个?也许你可以很容易地修改它。
-
从 C++ 调用 C 函数不符合 C 标记的条件。
-
@Holt,来自 gpsd 的 libgps,我可以修补它,但这是最后的选择(假设我想分发该程序,并且我不想随它一起发布修改后的 lib)。我会考虑向项目发送补丁。