Как буферизовать стандартный вывод в памяти и записать его из выделенного потока

У меня есть приложение C со многими рабочими потоками. Важно, чтобы они не блокировались, поэтому, когда рабочим потокам нужно записать файл на диск, я записал их в кольцевой буфер в памяти, а затем выделил поток для записи этого буфера на диск.

Рабочие потоки больше не блокируются. Выделенный поток может безопасно блокировать во время записи на диск, не затрагивая рабочие потоки (он не удерживает блокировку во время записи на диск). Мой буфер памяти настроен так, чтобы быть достаточно большим, чтобы поток писателя мог его поддерживать.

Это все прекрасно работает. У меня вопрос, как мне реализовать что-то подобное для stdout?

Я мог бы использовать макрос printf () для записи в буфер памяти, но у меня нет контроля над всем кодом, который может записываться в стандартный вывод (часть из них находится в сторонних библиотеках).

Мысли? NickB

Ответы на вопрос(7)

Ваш ответ на вопрос