2011-12-07 2 views
4

나는 이것과 관련된 몇 가지 질문 (here)을 읽었지만 여전히 혼란 스럽다.쓰기 시스템 호출이 데이터를 디스크에 직접 씁니다?

제 생각에 write 시스템 호출은 데이터를 Buffered Cache (이 질문에서 언급 한대로 OS 캐시)에 저장합니다. Buffered Cache이 가득 차면 디스크에 기록됩니다.

버퍼 된 IO는이 위에 더 최적화됩니다. C RTL buffers에 캐시되고 가득 차면 write 시스템 호출을 실행하여 내용을 Buffered Cache으로 옮깁니다. fflush을 사용하면 C RTL buffersBuffered Cache에있는이 특정 파일과 관련된 데이터가 디스크로 전송됩니다.

내 이해가 정확합니까?

+0

파일 열기 모드, 시스템 별 파일 처리 설정에 따라 ... – Mat

답변

3

stdio 버퍼를 플러시하는 방법은 사용하는 표준 C 라이브러리에 따라 다릅니다. Linux manual page에서 인용 : FFLUSH()는 C 라이브러리가 제공하는 유저 공간 버퍼를 플러시

참고. 데이터가 디스크에 물리적으로 저장되도록하려면 커널 버퍼가 이어야합니다 (예 : sync (2) 또는 fsync (2)).

이 리눅스 시스템에 fflush를 사용하거나 write 함수를 호출 버퍼 오버 플로우를 의미한다. 그러나 운영 체제는 내부 버퍼를 유지하고 실제로 데이터를 장치에 쓰지 않을 수 있습니다. 데이터가 실제로 장치에 기록되도록하려면 fflush과 하위 수준 fsync을 모두 사용하십시오.

편집 : 답을 다시 말하십시오.

+0

@JP : printf가 마침내 write 시스템 호출을하게된다는 의미에서 이들을 혼합했습니다. – FourOfAKind

+0

@Lamia : 대답. –

관련 문제