我想将 C 库集成到我的 C++/Qt 项目中。该库接受 FILE* 流以打印调试消息(而不是为日志记录回调函数提供挂钩......)。
如果我只是通过stderr
,它可以正常工作,但我想将它集成到我自己的日志基础设施中,它使用qDebug()
和合作。
我最初的想法是使用socketpair()
,获取发送方 fd 的 FILE* 流,将其传递给库,并使用 QSocketNotifier 处理接收方,但我遇到了 2 个问题:
- 它不是多平台的,尽管有适用于 Windows 的实现。
- 我的应用程序是单线程的(我想保持这种方式),这意味着套接字对的 2 个套接字是从同一个线程写入和读取的。一段时间后,这似乎以僵局告终。
还有哪些其他方法可以提供 FILE* 流,将其读取集成到 Qt 的事件循环中,不需要多线程,并且是多平台的?