SKKU SW/Operating System

[OS] [Linux / UNIX] sync, fsync 함수

효딩 2024. 6. 9. 13:57

비동기함수 sync, 동기함수 fsync

 

유닉스(리눅스)에서는 메모리 정보를 disk에 적을 때 바로 disk에 적지 않고,

CPU 바로 옆에 있는 cache에 적은 다음 그 정보를 disk로 옮긴다.

 

sync 또는 fsync 시스템 콜을 이용해서 write를 할 수 있는데,

 

sync는 비동기함수이기 때문에 write 명령을 CPU에 전달하고 리턴된다.

 

void sync(void); // 항상 성공하므로 반환 값이 없다.

단순히 모든 버퍼를 디스크에 쓰도록 처리하는 과정을 시작하도록 명령할 뿐

그 버퍼 내용을 디스크에 쓰는 연산이 완료될 때까지 기다리지는 않는다.

 

반면, fsync는 동기함수로, write가 끝날 때까지 기다렸다가 리턴된다.

(disk 끝까지 내려가서 써지는 거 확인하고 return)

 

int fsync(int fd);

인자로는 파일 디스크립터 하나만 주면 되고, fd는 반드시 쓰기 상태로 열려 있어야 한다.