2010-12-29 4 views

ответ

5

Вы не дали язык, но при условии, что вы используете STDIO функции языка C (fopen() и т.д.) или на языке, который использует эти (и большинство из них, по причинам мобильности):

Это зависит от базовой библиотеки времени выполнения C.

Большинство библиотек попытаются определить, подключен ли STDOUT к терминалу, и избегайте буферизации, если это так, и выполняйте буферизацию блока (например, мои системные буферы системы 8Kb за раз), если нет.

+1

Довольно точно это неправильно; 'stdout' обычно является строковым буфером при подключении к терминалу, а не без буферизации. Когда все выходы заканчиваются в новой строке, разница не имеет значения, но если вы выводите без новых строк (скажем, показывая «индикатор выполнения» путем вывода точки за раз), она будет буферизирована. Явные вызовы 'fflush' были бы необходимы для вывода частичных строк по запросу, или вы бы использовали' setvbuf' для изменения режима буферизации для 'ФАЙЛА * 'в целом. – ShadowRanger

+0

@ShadowRanger: Вы правы, пожалуйста, отредактируйте, чтобы добавить это. –

1

Краткий ответ: по умолчанию STDOUT обычно не загружается. Если это проблема для вас, существует fflush(stdout);, но это редко необходимо

+0

Опять же, как отмечено в принятом ответе, 'stdout' обычно является строковым буфером при подключении к терминалу и блокирует буфер в противном случае. Никакая общая среда выполнения C, о которой я знаю, делает ее небуферизованной по умолчанию. – ShadowRanger

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

  • Нет связанных вопросов^_^