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

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

Ответы [ 2 ]

5 голосов
/ 05 декабря 2008

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

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

0 голосов
/ 05 декабря 2008
...