2013-05-22 4 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 참조, 거기에 관한 문서가 있습니다. – 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 for 스택 오버플로 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); 

을, 결과는 다음과 같습니다 cpp에있는

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

을 호출하는 것과 아무런 관련이 없습니다. 그렇다면이 질문에 대한 답변은 대략 미터 톤입니다. – xaxxon

+0

그러나 fflush가 실행하는 데 많은 시간이 걸리므로 fflush 사용법은 무엇입니까? – Sayakiss

+0

'fflush '의 전체 점은 출력 버퍼를 강제로 디스크에 기록하는 것입니다. 이것이 "동기화 된"의미입니다. 우리가 버퍼링하는 이유는 디스크가 느리고 기록 할 수있는 데이터의 최소 단위가 섹터 (전통적으로 512 바이트)이기 때문입니다. 가끔은 상관하지 않으며, 출력 한 모든 내용이 디스크에 있음을 보장해야합니다. – paddy

관련 문제