lock에는 대표적으로 두 가지가 존재합니다.
- Writers’s lock: Exclusive lock으로 writing 하는 process 혹은 thread가 lock을 소유하면 다른 writer나 reader는 모두 writer lock을 반환할 때까지 기다려야 합니다.
- Reader’s lock: Shared lock으로 다른 reader는 바로 진입이 가능합니다. (writer는 기다려야 함)
File lock을 하는 대표적인 함수는 fcntl입니다.
int fcntl (int fildes, int cmd, struct flock *lock)
- fildes: file descriptor
- cmd: command to do
cmd:
- F_GETLK: 현재 LOCK을 반환합니다
- F_SETLK: LOCK을 바로 얻으려고 시도하는데 만약 사용중이라면 바로 error를 반환합니다 (non-blocking)
- F_SETLKW: LOCK을 바로 얻으려고 시도하는데 만약 사용중이라면 LOCK이 반환될 때까지 기다립니다 (blocking)
fseek, fread, fwrite 등의 함수도 소개하면 좋겠지만 정리의 목적이 세부적인 함수들까지 소개하는 것이 아니므로 이 정도 선에서 마무리하겠습니다.