'화일락'에 해당되는 글 1건

  1. 2010.01.20 File Lock 및 fcntl

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);
And
prev | 1 | next