Quick Flow
text
path -> open/CreateFile -> descriptor or HANDLE
-> read/write at file offset -> OS page cache -> file system -> storage
close/CloseHandle -> process reference releasePath는 이름을 찾는 입력이고, 열린 뒤 I/O에는 process가 가진 descriptor 또는 handle을 사용합니다. Unix 계열의 file descriptor는 작은 정수이고 Windows HANDLE은 opaque value이며 세부 계약은 다릅니다.
열린 파일의 상태
Open 결과에는 접근 권한, 공유 방식, 현재 offset와 같은 상태가 연결될 수 있습니다. Descriptor를 복제하거나 handle을 상속하면 같은 underlying file object와 offset을 공유할 수 있으므로 별개의 숫자라고 독립된 파일 상태라고 단정하지 않습니다.
User-space stream buffer와 OS page cache는 다른 계층입니다. flush가 언어 runtime buffer를 OS로 넘겼다는 뜻과 storage 장치의 durable write 완료는 같지 않으며, 내구성이 필요하면 platform의 명시적 동기화 계약을 확인합니다.
자주 틀리는 점
- File과 path를 같은 것으로 보지 않습니다. Rename 뒤에도 열린 handle은 유효할 수 있습니다.
- Handle을 닫지 않으면 process 자원과 file lock이 남을 수 있습니다.
- 한 번의
read·write가 요청한 bytes 전체를 항상 처리한다고 가정하지 않습니다. - 여러 thread나 process가 같은 file offset과 데이터를 공유할 때 동기화 규칙을 확인합니다.
참고 링크
2 sources