'화일락'에 해당되는 글 1건
- 2010.01.20 File Lock 및 fcntl
#include <fcntl.h>
int fcntl (int filedes, int command, ...)
command
--------- file lock 관련 command -----------
1. F_GETLK : flock에 대한 정보를 얻어온다
2. F_SETLK : flock에 정보로 셋팅한다
3. F_GETLKW : F_GETLK과 같지만 Lock있으면 Wait
4. F_SETLKW : F_SETLK과 같지만 Lock있으면 Wait
--------- 그 외 command -----------
5. F_DUPFD : dup, dup2의 기능을 수행한다
6. F_GETFD : FD_CLOEXEC에 대한 file descriptor의 특성을 얻어온다 (dup을하면 file status flag는 공유되지만 file descriptor flags는 각자 다르다)
7. F_SETFD : FD_CLOEXEC에 대한 특성을 셋팅할 수 있다 (셋팅되어있으면 exec를 통해서 실행될 때 해당 fd는 닫힌다)
8. F_GETFL : file status flag를 얻어온다
9. F_SETFL : file status flag를 셋팅한다 (access mode는 변경 불가능)
struct flock {
short int l_type; // F_RDLCK, F_WRLCK, F_UNLCK
short int l_whence; // SEEK_SET, SEEK_CUR, SEEK_END
off_t l_start; // start position of fd
off_t l_len; // 0일 경우 전체
pid_t l_pid; // F_GETLK 에서만 사용가능 lock걸은 process의 pid
}
## 예제 : 파일락걸기
struct flock lock;
lock.l_type = F_WRLCK;
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
fcntl (fd, F_SETLKW, &lock);
## 예제 : 파일락풀기
struct flock lock;
lock.l_type = F_UNLCK;
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
fcntl (fd, F_SETLK, &lock);
## 예제 : 파일락정보 가져오기
struct flock lock;
fcntl (fd, F_GETLK, &lock);