열려진 파일에 대하여 권고잠금을 걸거나 해제한다.
#include <sys/file.h>
int flock(int fd, int operation) |
열려진 파일fd에 권고 잠금을 적용하거나 제거한다.
operation은 잠금과 관련된 연산으로 다음과 같은
종류의 연산을 지원한다.
- LOCK_SH
공유잠금. 한개 이상의 프로세스들이 주어진 시간에 파일에 대한
공유 잠금을 하도록 한다.
- LOCK_EX
배타(exclusive)잠금. 주어진 시간에 단지 하나의 프로세스만 파일에
대하여 잠금을 얻을 수 있도록 한다.
- LOCK_UN
잠금 해제
- LOCK_NB
잠금일 때 블럭하지 않고 바로 리턴된다. 다른 연산과
or할 수 있다.
한 파일에 대해서 공유잠금과 배타잠금을 동시에 할 수는 없다. 잠금은
파일 기술자가 아닌 inode에 대해서 일어나게 된다. 그래서 dup와 fork는
중복된 잠금을 만들어 내지 않는다.
성공시 0이 리턴된다. 에러시 -1이 리턴된다.
- EWOULDBLOCK
파일이 잠겨 있고 LOCK_NB플래그가 선택되어 있을 경우
#include <unistd.h> #include <stdlib.h> #include <sys/file.h> #include <sys/types.h> #include <sys/stat.h>
int main(int argc, char **argv) { int fd; int id; int i; char *file_name = "lock.file";
id = atoi(argv[1]); fd = open(file_name, O_RDONLY); sleep(1); if (flock(fd, LOCK_EX) != 0) { printf("flock error\n"); exit(0); }
for (i =0; i < 5; i++) { printf("OK File FD %d : %d\n", id,i); sleep(1); } if (flock(fd, LOCK_UN) != 0) { printf("filue un lock error\n"); } close(fd); } |
:::
