我想将C库集成到我的C ++ / Qt项目中。该库接受FILE *流以打印调试消息(而不是为日志回调函数提供挂钩......)。
如果我只是通过stderr
,它可以正常工作,但我想将其集成到我自己的日志记录基础结构中,该基础结构使用qDebug()
和co。
我最初的想法是使用socketpair()
,获取发送方fd的FILE *流,将其传递给库,并使用QSocketNotifier处理接收端,但我遇到了2个问题它:
现有哪些其他方法可以提供FILE *流,将其读数集成到Qt的事件循环中,不需要多个线程,并且是多平台的?
答案 0 :(得分:1)
只要您可以向存储中获取文件描述符,就可以使用Linux上的不可移植FILE*
和Windows上的fdopen
从中获取_fdopen
。
您还可以使用pipe
/ _pipe
在Linux和Windows上创建常规管道。
管道应与Qt事件循环集成。我不熟悉Qt API,可能会为此公开可移植的API。可以使用QLocalSocket Class:
QLocalSocket类提供本地套接字。在Windows上,这是一个命名管道,在Unix上,这是一个本地域套接字。
它有qintptr QLocalSocket::socketDescriptor() const
方法,返回可以用fdopen
包装的文件描述符,以生成FILE*
。