UUCPLOCK(3)

명칭
uu_lock, uu_unlock, uu_lockerr - 시리얼 디바이스의 제어권의 취득 및 방폐

프로그램 라이브러리
libutil

서식
<sys/types.h> <libutil.h> int uu_lock(const char *ttyname) int uu_lock_txfr(const char *ttyname, pid_t pid) int uu_unlock(const char *ttyname) const char * uu_lockerr(int uu_lockresult)

해설
uu_lock() 함수는, 건네받았다 ttyname 에 의해 주어지는 접미말을 가진다 /var/spool/lock/LCK.. (이)라는 이름의 락 파일을 작성하려고 시도합니다. 그 파일이 벌써 존재하는 경우는, 잠그는 프로그램의 프로세스 ID 가 그 파일에 들어가 있는 것이라고 봅니다.

그 파일이 아직 존재하고 있지 않는지, 또는 락 파일안에 있었다 프로세스 ID 에 의해 주어지는 소유측 프로세스가 이미 움직이지 않은 경우는, uu_lock() 함수는 파일에 자신의 프로세스 ID 를 쓰기 그리고 성공을 돌려줍니다.

uu_lock_txfr() 함수는, 락 소유권을 하나 더의 프로세스에 이전합니다. uu_lock() 함수가 그 전에 성공하고 있을 필요가 있습니다.

uu_unlock() 함수는, 주어졌다 ttyname 에 붙어 uu_lock() 에 의해 작성된 락 파일을 삭제합니다. uu_unlock() (을)를 호출하기 전에는, uu_lock() 하지만 성공하지 않으면 안 되는 것에 주의해 주세요.

uu_lockerr() 함수는, uu_lock() (으)로부터 돌려주어지는 것과 같게, 에러 uu_lockresult (을)를 표현하는 에러 string를 돌려줍니다.

반환값
uu_unlock() 함수는, 성공하면(자) 0, 실패하면(자) -1 를 돌려줍니다.

uu_lock() 함수는, 다음의 몇개의 값을 돌려줍니다:

UU_LOCK_INUSE: 락은 다른 프로세스에 의해 사용되고 있습니다.

UU_LOCK_OK: 락의 작성에 성공했습니다.

UU_LOCK_OPEN_ERR: open(2) (은)는 락 파일을 열 수가 없습니다.

UU_LOCK_READ_ERR: read(2) (은)는, 락 파일을 읽어낼 수가 없습니다.

UU_LOCK_CREAT_ERR: creat(2) (은)는, 일시 락 파일을 작성할 수가 없습니다.

UU_LOCK_WRITE_ERR: write(2) 의 호출에 의해, 현재의 프로세스 ID 를 락 파일에 쓰기일을 할 수 없습니다.

UU_LOCK_LINK_ERR: link(2) (은)는, 일시 락 파일을 링크 할 수가 없습니다.

UU_LOCK_TRY_ERR: 잠그는 시도는, 5 회의 시행의 뒤에 실패했습니다.

UU_LOCK_OK 의 값이 uu_lockerr() 에게 건네졌을 경우는, 하늘의 string가 돌려주어집니다. 그 이외의 경우는, 실패한 이유를 나타내는 string가 돌려주어집니다. uu_lockerr() (은)는, 현재의 errno 의 값을 사용해 정확한 에러를 판단합니다. uu_lock() (을)를 호출하고 나서 uu_lockerr() (을)를 호출할 때까지 에 errno 하지만 변화해 버리지 않게 주의해 주세요.

uu_lock_txfr() 함수는, 다음의 몇개의 값을 돌려줍니다：

UU_LOCK_OK: 전송은 성공했습니다. 지정한 프로세스가 현재 디바이스 락을 가지고 있습니다.

UU_LOCK_OWNER_ERR: 현재의 프로세스는, 지정된 디바이스에 대한 락을 벌써 가지고는 있지 않습니다.

write(2) 의 호출해에 따라서는, 새로운 프로세스 ID 를 락 파일에 쓰기일을 할 수 없습니다.

에러
uu_lock() 함수가 위의 에러치의 어느쪽이든을 돌려주었을 경우는, 글로벌치 errno (을)를 사용해 그 이유를 판단할 수가 있습니다. 자세하게는, 해당한다 메뉴얼 페이지를 참조해 주세요.

uu_unlock() 함수는, 락 파일을 삭제할 수 없었던 이유를 나타낸다 글로벌 변수 errno (을)를 설정합니다. 자세하게는, unlink(2) 에 대한 해설을 참조해 주세요.

참조
lseek(2), open(2), read(2), write(2)

버그
실효 락을 남긴 프로그램과 같은 프로세스 ID 가 새로운 프로세스로 나누어 맞힐 수 있었을 경우는, 실효한 락이 실효가 인식되지 않을 가능성이 있습니다.

호출 프로세스는, /var/spool/lock 디렉토리에 대한 기록 허가를 가지고 있지 않으면 안됩니다. 이 디렉토리의 허가가 락 된다 시리얼 디바이스의 허가와 같은 것을 프로텍션하는 구조는 갖추고 있지 않습니다.