стандартный перенаправление - PullRequest
1 голос
/ 16 октября 2011

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

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

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

Ответы [ 2 ]

2 голосов
/ 16 октября 2011

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

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

1 голос
/ 16 октября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...