Joinc 팀블로그 리눅스 메뉴얼 정리 Joinc 위키
댓글

Recent Comments

Powered by Disqus
팀블로그 카테고리
  전체 (1105)
   공지사항 (1)
   검색엔진 (21)
   기술동향 (58)
   게임 (2)
   독서 (6)
   리눅스 (12)
   보안 (1)
   사회문제 (22)
   어셈블리 (43)
   영화 (3)
   오픈소스 (10)
   음악 (9)
   인물 (1)
   포인터 (4)
   프로그래머 (23)
   팀블로그 (20)
   테터툴즈 (29)
   C/C++ (152)
   FireFox (11)
   Gimp (2)
   Google (98)
   Java (13)
   Perl (2)
   Pthread (11)
   STL (13)
   TCP/IP (8)
   Tools (31)
   Web2.0 (42)
   Wiki (1)
«   2010/07   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
2007/05/10 22:23

flock - 열려진 파일에 대하여 권고잠금을 한다.

원문 : Joinc Wiki

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

:::