2011-10-15 3 views
1

Если я делаю dup из stdout потока (для того, чтобы использовать его позже) и сделать freopen из stdout потока в файл, а затем printf("data"), файл сразу не обновляется с данными. Он обновляется только после выполнения fflush(stdout).стандартный вывод перенаправляет

Есть ли дополнительные побочные эффекты у fflush(stdout)?

Есть ли еще более элегантный способ сделать это?

ответ

1

Вы можете использовать один вызов на C89 setvbuf(), чтобы избежать загромождения кода с помощью fflush(). Или, может быть, обертка setlinebuf().

Но все вышеперечисленное просто очищает буферы. Возможно, вам понадобится использовать fsync().

+0

Редактировать: см., Например, http://stackoverflow.com/q/7145134/318716 –

+0

Другое редактирование: см. http://stackoverflow.com/questions/2340610/difference-between-fflush-and-fsync/2340641#2340641 для 'fflush' vs' fsync '. –

+0

Использование 'setvbuf()' с '_IOLBF' обычно является достаточным - если у вас нет очень необычных требований. –

2

Это нормальное поведение в буферизованных вводах-выводах. Ничего странного не должно произойти с флешем.

Однако в этом случае вы не должны возиться с stdout. Откройте файл с fopen, вы получите указатель FILE. Используйте этот указатель в таких функциях, как fprintf, чтобы печатать прямо в нем, и очистите его, если вам нужны немедленные результаты. Не забудьте закрыть файл с fclose, когда закончите.

+0

У него может не быть исходного кода для частей, которые вызывают printf. –

Смежные вопросы