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

StackOverflow https://stackoverflow.com/questions/343035

  •  19-08-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top