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





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