LINUX.ORG.RU

Странное поведение проги на С (срочно!)


0

0

Люди, кто сталкивался с таким? Имеется прога на C под Линукс. Прога использует fork() и всякие системные вызовы. Прикол такой: когда просто запускаешь прогу, на экран всё выводится нормально. Но когда делаешь редирект (./proga > output.txt), то в файле output.txt некоторые строчки дублируются. Впечатление как будто несколько процессов работают, но на экран-то вывод нормальный... Кто знает, что это?

anonymous

Стандартное (плохопредсказуемое) поведение форкнутой проги, когда _до_ форка происходит буферизованный вывод.

Сделай fflush перед форком.

И в конце форкнутой ветки обязательно делай _exit()

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

>когда _до_ форка происходит буферизованный вывод.

В вопросе недостаточно информации, но я бы предположил, что fork тут не особенно причем, а дело просто в выводе в stdout и в stderr, которые на экране располагаются более аккуратно, чем в файле.

anonymous
()
Ответ на: комментарий от anonymous

Вывод на stdout и stderr тут нипричём, я ничего на stderr не вывожу. Пользуюсь только printf(). Добавка fflush(stdout) помогла. Теперь осталось только попытаться понять, как же такое творится =))

anonymous
()
Ответ на: комментарий от anonymous

anonymous (*) (13.04.2005 11:49:08):

> Теперь осталось только попытаться понять, как же такое творится =))

Это FAQ!

После форка все данные сдублированы, в т.ч. и либсишные буфера, и счетчики. Естественно, грязные буфера вытолкнутся обоими процессами.

Вывод на экран буферизуется линиями. Поэтому '\n' в конце printf'а вытолкнет буфер.

Вывод в файл -- bloock buffered, поэтому буфер не выталкивается при EOL. При старте проги stdio уже редиректнут, поэтому либси его буферизует блоками.

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.