Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

<a href="/modules/moniwiki/wiki.php/manSearch?google=none&name=flock">flock</a>(2)

1장. flock(2)

차례
1.1절. 사용법
1.2절. 설명
1.3절. 반환값
1.4절. 에러
1.5절. 예제

열려진 파일에 대하여 권고잠금을 걸거나 해제한다.


1.1절. 사용법

#include <sys/file.h>

int flock(int fd, int operation)
		


1.2절. 설명

열려진 파일fd에 권고 잠금을 적용하거나 제거한다. operation은 잠금과 관련된 연산으로 다음과 같은 종류의 연산을 지원한다.

LOCK_SH

공유잠금. 한개 이상의 프로세스들이 주어진 시간에 파일에 대한 공유 잠금을 하도록 한다.

LOCK_EX

배타(exclusive)잠금. 주어진 시간에 단지 하나의 프로세스만 파일에 대하여 잠금을 얻을 수 있도록 한다.

LOCK_UN

잠금 해제

LOCK_NB

잠금일 때 블럭하지 않고 바로 리턴된다. 다른 연산과 or할 수 있다.

한 파일에 대해서 공유잠금과 배타잠금을 동시에 할 수는 없다. 잠금은 파일 기술자가 아닌 inode에 대해서 일어나게 된다. 그래서 dup와 fork는 중복된 잠금을 만들어 내지 않는다.


1.3절. 반환값

성공시 0이 리턴된다. 에러시 -1이 리턴된다.


1.4절. 에러

EWOULDBLOCK

파일이 잠겨 있고 LOCK_NB플래그가 선택되어 있을 경우


1.5절. 예제

#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);
}