APUE를 보던중 이해가 안가는 부분이 있어 질문드립니다.

athxue의 이미지

open함수의 인자로 사용되는 O_SYNC의 개념이 파일의 변경사항을 실제로 장치에 쓰기전에 일단 커널에서
버퍼링한다음에 일정시간이 되면 쓰게하는것이 아니라 write가 호출될때 마다 실제 장치에 쓰게 한다
라는 개념이 맞는건가요? Have each write wait for physical I/O to complete라고 되어있는데요..
근데 이렇게 하는것과 O_SYNC없이 매 write함수밑에 fsync를 호출하는것, 그리고 O_SYNC와 fsync를
같이 적용한 것이 어떤 차이가 있는건가요? 책의 테스트 결과에서 보면 3가지가 각각 다른결과를 보여
주는데요..

익명 사용자의 이미지

"write가 호출될때 마다 실제 장치에 쓰게 한다" 라기 보다는
write() 호출이 실제 쓰기작업이 완료될때까지 블럭된다고 보는게
맞지을까요?

익명 사용자의 이미지


윗분 말씀이 맞고요, O_SYNC도 커널에서 버퍼링은 합니다. 커널 버퍼링을 하지 않으려면 Linux의 경우 O_DIRECT를 줘야 합니다.