我想將C庫集成到我的C++/Qt項目中。該庫接受FILE *流以打印調試消息(而不是爲日誌記錄回調函數提供鉤子)。將FILE *流重定向到Qt中的自定義處理程序中
它正常工作,如果我只通過stderr
,但我想將它集成到我自己的日誌記錄基礎結構中,它使用qDebug()
和co。
我最初的想法是利用socketpair()
,得到了發送端的fd的FILE *流,它傳送給庫,並處理好與QSocketNotifier中的接收方,但我打了2個問題吧:
- 這不是多平臺,雖然有Windows的實現。
- 我的應用程序是單線程的(我想保持這種方式),這意味着socketpair的2個套接字是從同一個線程寫入和讀取的。這似乎在一段時間後會以僵局結束。
什麼是其他方法存在提供FILE *流,將其閱讀整合到Qt的事件循環,不需要多線程,並且是多平臺?
它是一個公共C庫嗎?如果是,哪一個?也許你可以很容易地修改它。 – Holt
從C++調用C函數不符合C標籤。 – Olaf
@Holt,來自gpsd的libgps,我可以修補它,但它是最後一個選項(假設我想分發該程序,並且我不想用它發佈修改後的lib)。我會考慮給這個項目發一個補丁。 – zgyarmati