[완료]file operations 구조체에서 flush와 fsync의 차이점?
글쓴이: sangchu / 작성시간: 월, 2010/06/14 - 10:58오전
리눅스 디바이스 드라이버라는 책에 보면
flush : 드라이버 내부에 쓸 버퍼의 내용을 하드웨어에 모두 적용시키도록 구현하는 함수로 지정
fsync : 버퍼에 있는 데이터를 모두 하드웨어에 쓰도록 하는 함수로 지정.
요는 둘다 버퍼에 있는 내용을 하드웨어에 적용시킨다는 것 아닌가요? 차이점이 무엇인지?
그리고 file_operations의 멤버들 하나 하나에 대해 자세한 설명이 되있는 문서나 사이트는 없나요?
Forums:


fflush 는 그냥 C 표준
fflush 는 그냥 C 표준 함수이고, fsync는 posix 표준이라는 것이 가장 큰 차이 아닐까요?
아마도, 리눅스와 같은 posix를 따르는 OS에서는 fflush가 fsync를 사용해서 구현이 되어 있을 것 같고요.
사용가능한 범위 내에서 가장 일반적인 표준을 사용하는 것이 코드 호환성에서 좋겠죠.
즉, fflush는 linux 및 windows에서 사용 할 수 있지만 fsync는 linux에서만 사용 가능하겠죠.
덧붙이면,
fflush는 stdlib내의 user space buffer의 내용을 (kernel로) 내려버리는 역할을 하고요,
fsync는 kernel내의 buffer를 device (또는 device driver)로 내려버리는 역할을 합니다.
->flush는 close(2)마다
->flush는 close(2)마다 호출되고 ->fsync는 fsync(2)할 때 호출됩니다. 둘은 별 상관은 없고 ->flush는 필요하지 않은 경우도 많이 있구요. ->open과 ->flush가 1:1 대응이고, 마지막 ->flush후에 ->release가 호출됩니다. 그냥 코드 보시라능;;;