2014-12-29 2 views
0

fwrite()을 사용하여 루프의 파일에 데이터를 씁니다. 40 번 반복되지만 처음에는 fwrite() 마지막 몇 KB가 파일에 기록되지 않습니다. 연속적인 fwrite()이 정상적으로 작동하는 반면, 단일 청크로 실행하면 4000 바이트 fwrite()이 4000을 반환하지만 파일 내용은 4000 (약 3000 바이트) 미만입니다. perror()에도 오류가보고되지 않습니다. 친절하게 도와 주시고 진심으로 감사드립니다.fwrite() 반환 값이 파일 크기와 일치하지 않습니다.

+6

코드의 ** 최소 ** 컴파일 가능한 예를 제공해주십시오. – Jens

+0

당신이 작성한 코드에 대해 야생의 추측을하는 것은이 바이너리 데이터입니까? 그리고 바이너리로 열어 파일에 쓰고 있습니까 (예 :'fopen ("filename", "wb");')? –

답변

6

fwrite은 파일에 쓰지 않습니다. 이 함수는 버퍼링 된 파일 스트림에 씁니다. fclose으로 파일을 닫거나 fflush으로 버퍼를 플러시 할 때 버퍼가 디스크로 플러시됩니다. 해당 기능을 사용하여 버퍼를 비 웁니다.

버퍼는 좋은 성능을 얻기 위해 사용됩니다. 성능이 문제가 아니며 디스크에 직접 쓰기가 필요한 경우 버퍼를 비활성화하려면 setbuf 또는 setvbuf 기능을 사용할 수 있습니다. (Barmar의 의견에 감사드립니다).

+1

'setbuf()'를 사용하여 버퍼링을 비활성화 할 수도 있습니다. – Barmar

관련 문제