2011-10-15 2 views
1

stdout 스트림의 dup을 나중에 사용하기 위해 만들고 stdout 스트림의 freopen을 파일로 만든 다음 printf("data")으로 만들면 파일이 즉시 데이터로 업데이트되지 않습니다. fflush(stdout)을 수행 한 후에 만 ​​업데이트됩니다.stdout 리디렉션

fflush(stdout)에는 몇 가지 추가 부작용이 있습니까?

더 우아한 방법이 있나요?

답변

1

fflush()과 함께 코드가 어지럽히 지 않도록 C89 setvbuf()에 대한 단일 호출을 사용할 수 있습니다. 아니면 래퍼 setlinebuf().

그러나 위의 모든 것만 버퍼를 플러시합니다. fsync()을 사용해야 할 수도 있습니다.

+0

수정 : 예 : http://stackoverflow.com/q/7145134/318716 –

+0

다른 편집 : 'fflush'와 'fsync'에 대해 http://stackoverflow.com/questions/2340610/difference-between-fflush-and-fsync/2340641#2340641을 참조하십시오. '. –

+0

매우 특이한 요구 사항이없는 한'setvbuf()'를'_IOLBF'와 함께 사용하면 보통 충분합니다. –

2

이것은 버퍼링 된 I/O에서 정상적인 동작입니다. 이상한 일은 플러시와 함께 일어나지 않아야합니다.

그러나이 경우 stdout을 사용하면 안됩니다. fopen으로 파일을 열면 FILE 포인터가 나타납니다. fprintf과 같은 함수에서이 포인터를 사용하여 직접 인쇄하고 즉각적인 결과가 필요한 경우이를 플러시합니다. 완료되면 fclose으로 파일을 닫는 것을 잊지 마십시오.

+0

그는 printf를 호출하는 부분에 대한 소스 코드가 없을 수도 있습니다. –

관련 문제