LOCKF(3)

명칭
lockf - 파일상의 레코드의 락

프로그램 라이브러리
libc

서식
<unistd.h> int lockf(int filedes, int function, off_t size)

해설
함수 lockf() (은)는, 파일의 섹션을 조언 모드 락으로 락 할 수 있습니다. 락 되고 있는 파일의 섹션을 다른 프로세세스로부터 락 하려고 해, lockf() 호출을 실행하면(자), 해당 섹션의 락이 해제될 때까지 에러 표시치인가 또는 블록이 되돌아 옵니다. 락은 프로세스 (이)가 종료되면(자) 모두 제거됩니다.

인수 filedes (은)는, 대상 파일의 기술자입니다. 파일 기술자는, 기입만 (O_WRONLY), 또는 읽어들여 / 기입 양쪽 모두 (O_RDWR)의 어느 쪽인지로 조작할 수 있을 필요가 있습니다. 인수 function (은)는 소요 동작을 정의하는 제어치입니다. Function 그리고 지정할 수 있는 값은 다음과 같습니다.
Function
    해설
F_ULOCK
    락 되고 있는 섹션의 락 해제
F_LOCK
    섹션의 배타적 사용의 락
F_TLOCK
    섹션의 배타적 사용의 테스트와 락
F_TEST
    섹션의 타프로세스에 의한 락 상황을 테스트

F_ULOCK (은)는, 파일의 섹션으로부터 락을 해제합니다. F_LOCK 및 F_TLOCK (은)는, 어느쪽이나, 섹션이 사용 가능 상태라면 잠급니다. F_TEST (은)는, 타프로세스가 지정의 섹션상에 있는지 어떤지를 검사합니다.

인수 size (은)는, 락 또는 락 해제 대상의 바이트수를 나타내고 있습니다. 락 또는 락 해제 대상의 섹션은, 파일상의 현재의 오프셋(offset)를 개시 지점으로 해, 전방향이면 정부호의 길이로, 뒤방향이면 부의 길이로 나타냅니다. (현재의 오프셋(offset)값을 제외한 후속 하는 범위의 바이트수) 그러나, 파일의 선두보다 전을 개시점 또는 대상 범위로 할 수 없습니다. size 하지만 0 의 경우, 섹션은 현재의 지점으로부터 파일상에서 취할 수 있는 최대 범위의 지점까지 락 됩니다 (즉, 현재의 지점에서 현시점의 또는 향후 확장하는 파일 의 종료 부분까지입니다).

F_LOCK 또는 F_TLOCK 그리고 락 된 섹션은, 동일 프로세스로 선행해 락 된 섹션의 전체 또는 일부를 포함하든가 혹은 포함되는 일이 있습니다. 이 경우, 또는 락 된 섹션이 인접할 때, 이러한 섹션은 하나의 락 된 섹션에 통합됩니다. 요구에 의해 락의 수가 시스템으로 정한 한계를 넘었을 경우, 요구는 에러가 됩니다.

F_LOCK 및 F_TLOCK 에 의한 요구는, 섹션이 이용 불가의 경우 각각의 취하는 동작에 대해 차이가 있습니다. F_LOCK (은)는, 섹션이 이용 가능하게 될 때까지 호출 프로세스를 억제합니다. F_TLOCK 그럼, 타프로세스가 이미 잠그고 있는 경우, 함수는 에러가 됩니다.

파일의 락은, 파일의 기술자의 락 프로세스가 종료하고 처음으로 해제됩니다.

F_ULOCK 요구는, 프로세스로 제어되는 복수의 락 되었다 섹션 (전체 또는 일부)을 해방합니다. 락 된 섹션은, 현재의 파일상의 지점으로부터 size 그리고 가리키는 길이의 바이트 몇분, 또는 사이즈 지정이 0 의 경우 파일의 종료 위치까지, 락이 해제됩니다. 락 된 섹션 하지만 모두 해방되지 않을 때 (즉, 락 해제되는 구역의 최초의 부분 또는 끝의 부분이 락 된 섹션에 있을 때), 섹션의 나머지의 부분은 프로세스에 의해 계속 락 됩니다. 락 된 섹션의 중심부분을 해방하는 것으로써, 락 된 나머지의 부분은, 선두 구역과 끝의 구역의 2 개(살)의 섹션 로 분리됩니다. 요구에 의해, 시스템내의 락의 수가, 시스템으로 정한 제한치를 넘는 경우, 그 요구의 처리는 실패가 됩니다.

F_ULOCK 요구는, 사이즈 지정이 0 이 아니고, 요구된 섹션의 최종 바이트의 위치가, off_t 형의 오브젝트에 대한 최대치를 넘지 않는 경우, 또는 프로세스내에 사이즈 0 의 락이 있어, 요구 대상 섹션의 최종 바이트를 포함하고 있는 경우, 사이즈 0 의 요구 대상 섹션의 개시 위치로부터 락 해제한다 요구로서 다루어집니다. 그렇지 않은 경우, F_ULOCK 요구는, 요구 대상의 섹션만을 락 해제하려고 합니다.

락 되고 있는 구역을 제어하고 있는 프로세스가, 타프로세스로 락 되고 있는 구역을 잠그려고 sleeve 상태가 되면(자), 데드 록이 일어날 가능성이 있습니다. 이 구조에 의해, 락 된 구역이 락 해제될 때까지의 sleeve가 데드 록을 일으켜, EDEADLK 에러로 이상종료(ABEND) 하는 것을 검출할 수 있습니다.

lockf(), fcntl(2) 및 flock(2) 에 의한 락은 동시 병행으로 문제 없게 사용할 수 있습니다. 섹션에서의 방호 처리는 적당한 시그널로 해석됩니다.

반환값
실패시에는, 기존의 락은 변경되지 않습니다.

에러
lockf() (은)는, 다음 상태 때 실패가 됩니다.

[EAGAIN]
    인수 function (은)는, F_TLOCK 또는 F_TEST (이어)여, 섹션은 벌써 다른 프로세스에 의해 락 되고 있습니다.

[EBADF]
    인수 filedes (은)는 타당하지 않은 대상 파일 기술자입니다. 인수 function F_TLOCK 또는 F_TEST (이어)여, 인수 filedes (은)는 기입 가능 파일로서 타당한 파일 기술자가 아닙니다.

[EDEADLK]
    인수 function 하 F_LOCK (이어)여, 데드 록이 검출되었습니다.

[EINTR]
    인수 function 하 F_LOCK (이어)여, lockf() 하지만 시그널 발생에 의해 중단되었습니다.

[EINVAL]
    인수 function 하지만 F_ULOCK, F_LOCK, F_TLOCK, or F_TEST 의 어느 것에도 해당하지 않습니다.

    인수 filedes 하지만 락을 서포트하지 않는 파일을 나타내고 있습니다.

[ENOLCK]
    인수 function 하 F_ULOCK, F_LOCK, 또는 F_TLOCK (이어)여, 락 또는 락 해제의 요구에 의해, 락 구역의 수가 시스템으로 정했다 제한치를 넘습니다.

관련 항목
fcntl(2), flock(2)

표준
lockf() 함수는 xpg4. 2 에 적합하고 있습니다.