2013-05-22 2 views
0

В cpp reference, он утверждает, что fflush является:Есть ли какая-либо разница без fflush в этом коде?

Вызывает выходной поток файла, который будет синхронизирован с фактическим содержимым файла.

Действительно, я не понимаю, что это значит. Мне просто интересно, в этом коде, если я возьму fflush, есть ли разница?

Я протестировал его, кажется, есть немного разница, но я не могу найти шаблон. Может ли кто-нибудь объяснить это подробно для меня? Заранее спасибо.

#include<stdio.h> 
int i; 

int main() 
{ 
    fork(); 
    for(i=0;i<1000;i++) 
    { 
     printf("%d\n",i); 
     fflush(stdout);// without fflush, is there any difference? 
    } 
} 
+0

@xaxxon в CPP есть документация о C. – Sayakiss

+0

Удалённый комментарий. Я не смотрел, я только что видел URL. Твой ответ здесь. Пометка как обман: http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin – xaxxon

+0

google для stack overflow printf fflush <== первый результат – xaxxon

ответ

3

Стандартный вывод обычно сбрасывается при записи новой строки. Если вы хотите проверить это правильно, откройте файл и напишите ему. Чтобы ваши тесты были полезными, вам нужно будет написать намного больше данных, чем несколько целых чисел. Вы должны обнаружить, что упущение fflush приведет к значительному ускорению кода. Попробуйте синхронизации эти две петли ...

С промывкой:

FILE * fp = fopen("scratch", "w"); 
for(int i = 0; i < 1000000; i++) { 
    fprintf(fp, "Hello world"); 
    fflush(fp); 
} 
fclose(fp); 

Без промывки:

FILE * fp = fopen("scratch", "w"); 
for(int i = 0; i < 1000000; i++) { 
    fprintf(fp, "Hello world"); 
} 
fclose(fp); 

На моей машине, результаты:

With fflush: 4.57 seconds 
Without fflush: 0.24 seconds 
+0

да, есть около тонны ответов на этот вопрос на SO. – xaxxon

+0

Но это довольно странно, если fflush займет много времени, чтобы выполнить его, так что же такое использование fflush? – Sayakiss

+0

Весь смысл 'fflush' заключается в том, чтобы заставить выходной буфер записываться на диск. Это то, что означает «синхронизированный». Причина, по которой мы буферизируем, состоит в том, что диски медленны, а наименьшая единица данных, которую можно записать, - это сектор (традиционно 512 байт). Иногда вам все равно, и требуйте уверенности в том, что все, что вы выводите, находится на диске. – paddy

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

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