gpt4 book ai didi

c++ - 将 FILE * 流重定向到 Qt 中的自定义处理程序

转载 作者:行者123 更新时间:2023-11-28 05:04:35 24 4
gpt4 key购买 nike

我想将 C 库集成到我的 C++/Qt 项目中。该库接受 FILE* 流以打印调试消息(而不是为日志记录回调函数提供 Hook ...)。

如果我只传递 stderr,它会正常工作,但我想将它集成到我自己的日志基础结构中,它使用 qDebug() 和 co。

我最初的想法是使用socketpair(),获取发送方fd的FILE*流,将其传递给库,并使用QSocketNotifier处理接收方,但我遇到了2个问题与它:

  • 它不是多平台的,尽管有针对 Windows 的实现。
  • 我的应用程序是单线程的(我想保持这种状态),这意味着套接字对的 2 个套接字是从同一个线程写入和读取的。这似乎在一段时间后以僵局告终。

还有哪些其他方法可以提供 FILE* 流,将其读取集成到 Qt 的事件循环中,不需要多线程,并且是多平台的?

最佳答案

只要您可以获得存储的文件描述符,就可以在 Linux 上使用不可移植的 fdopen_fdopen 从中获取 FILE* > 在 Windows 上。

您还可以使用 pipe/_pipe 在 Linux 和 Windows 上创建常规管道。

管道应该与 Qt 事件循环集成。我不熟悉 Qt API,可能是它公开了可移植的 API。也许你可以使用 QLocalSocket Class :

The QLocalSocket class provides a local socket. On Windows this is a named pipe and on Unix this is a local domain socket.

它有 qintptr QLocalSocket::socketDescriptor() const 方法返回可以用 fdopen 包装的文件描述符来制作 FILE*.

关于c++ - 将 FILE * 流重定向到 Qt 中的自定义处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45131841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com