stdout
스트림의 dup
을 나중에 사용하기 위해 만들고 stdout
스트림의 freopen
을 파일로 만든 다음 printf("data")
으로 만들면 파일이 즉시 데이터로 업데이트되지 않습니다. fflush(stdout)
을 수행 한 후에 만 업데이트됩니다.stdout 리디렉션
fflush(stdout)
에는 몇 가지 추가 부작용이 있습니까?
더 우아한 방법이 있나요?
stdout
스트림의 dup
을 나중에 사용하기 위해 만들고 stdout
스트림의 freopen
을 파일로 만든 다음 printf("data")
으로 만들면 파일이 즉시 데이터로 업데이트되지 않습니다. fflush(stdout)
을 수행 한 후에 만 업데이트됩니다.stdout 리디렉션
fflush(stdout)
에는 몇 가지 추가 부작용이 있습니까?
더 우아한 방법이 있나요?
fflush()
과 함께 코드가 어지럽히 지 않도록 C89 setvbuf()
에 대한 단일 호출을 사용할 수 있습니다. 아니면 래퍼 setlinebuf()
.
그러나 위의 모든 것만 버퍼를 플러시합니다. fsync()
을 사용해야 할 수도 있습니다.
이것은 버퍼링 된 I/O에서 정상적인 동작입니다. 이상한 일은 플러시와 함께 일어나지 않아야합니다.
그러나이 경우 stdout을 사용하면 안됩니다. fopen
으로 파일을 열면 FILE
포인터가 나타납니다. fprintf
과 같은 함수에서이 포인터를 사용하여 직접 인쇄하고 즉각적인 결과가 필요한 경우이를 플러시합니다. 완료되면 fclose
으로 파일을 닫는 것을 잊지 마십시오.
그는 printf를 호출하는 부분에 대한 소스 코드가 없을 수도 있습니다. –
수정 : 예 : http://stackoverflow.com/q/7145134/318716 –
다른 편집 : 'fflush'와 'fsync'에 대해 http://stackoverflow.com/questions/2340610/difference-between-fflush-and-fsync/2340641#2340641을 참조하십시오. '. –
매우 특이한 요구 사항이없는 한'setvbuf()'를'_IOLBF'와 함께 사용하면 보통 충분합니다. –