Как вы очищаете выходные буферы, когда программа разветвляется?

У меня есть программа, которая записывает в ФАЙЛ *cgiOut, и сразу после записи в поток мне нужно разветвить и запустить фоновый процесс. Проблема в том, что после разветвления поток FILE * иногда сбрасывается, и я получаю дублированный вывод (после разветвления все открытые файлы закрываются, что, я думаю, приводит к очистке буферов). Как я могу этого избежать? Я не хочу закрывать файл в главном процессе, поскольку он открыт в библиотеке, и я думаю, что это сокет или канал.


person Matthew Smith    schedule 05.12.2008    source источник


Ответы (2)


Не совсем уверен, что понимаю ваш вопрос, но если вы хотите убедиться, что ваши cgiOut буферы пусты, прежде чем вы fork(), вы можете использовать fflush() в потоке непосредственно перед fork(). Это должно привести к очистке буферов.

Возможно, целесообразно использовать небуферизованный поток, изменив настройки буферизации через setvbuf() и друзей. Таким образом, у вас не будет (читай: не должно быть) проблем с буферизацией, но это может быть не то, что вам нужно.

person freespace    schedule 05.12.2008

fflush(file)

person BCS    schedule 05.12.2008