Я хотел бы интегрировать библиотеку C в свой проект C++/Qt. Библиотека принимает поток FILE* для печати отладочных сообщений (вместо предоставления перехватчика для функции обратного вызова ведения журнала...).
Это работает правильно, если я просто передаю stderr
, но я хотел бы интегрировать это в свою собственную инфраструктуру ведения журнала, которая использует qDebug()
и другие.
Моя первоначальная идея состояла в том, чтобы использовать socketpair()
, получить поток FILE* fd отправляющей стороны, передать его в библиотеку и обработать принимающую сторону с помощью QSocketNotifier, но я столкнулся с двумя проблемами:
- Он не мультиплатформенный, хотя есть реализации для Windows.
- Мое приложение является однопоточным (и я хочу, чтобы оно оставалось таким), и это означает, что 2 сокета пары сокетов записываются и читаются из одного и того же потока. Кажется, через некоторое время это заканчивается тупиком.
Какие существуют другие методы предоставления потока FILE*, интеграции его чтения в цикл событий Qt, не требующего нескольких потоков и мультиплатформенного?