Как вы очищаете выходные буферы, когда программа разветвляется?
Вопрос
У меня есть программа, которая пишет в FILE * cgiOut, и сразу после записи в поток мне нужно разветвить и запустить фоновый процесс. Проблема в том, что после разветвления поток FILE * иногда кажется сброшенным, и я получаю дублированный вывод (после разветвления все открытые файлы закрываются, что, я думаю, приводит к сбросу буферов). Как я могу избежать этого? Я не хочу закрывать файл в главном процессе, так как он открывается в библиотеке, и я думаю, что это сокет или канал.
Решение
Не совсем уверен, что я понимаю ваш вопрос, но если вы хотите убедиться, что ваши cgiOut
буферы пусты перед вами fork()
, вы можете использовать fflush()
в потоке непосредственно перед вами setvbuf()
. Это должно заставить буферы быть очищенными.
Может быть целесообразно использовать небуферизованный поток, изменив настройки буферизации через <=> и друзей. Таким образом, у вас не будет (читай: не должно быть) проблем с буферизацией, но это может быть не то, что вам нужно.
Другие советы