MSGCTL(2)

이름
msgctl - 메세지 작동을 제어한다.

사용법
# include <sys/types.h>
# include <sys/ipc.h>
# include <sys/msg.h>

int msgctl ( int msqid, int cmd, struct msqid_ds *buf )

설명
이 함수는 식별자 msqid인 메세지 큐를 cmd 에 의해 지정된 작동으로 제어한다. cmd 의 유효값은 다음과 같다:

IPC_STAT
    메세지 큐 데이터 구조를 buf에 의해 지정된 구조체로 복사한다. 사용자는 메세지 큐에 읽기 우선권을 가지고 있어야 한다.

IPC_SET
    buf가 가리키고 있는 msqid_ds 구조체의 일부 멤버 값을 메세지 큐 데이터 구조체에 쓰고 msg_ctime 멤버도 갱신한다. 사용자가 제공하고 buf가 가리키고 있는 struct msqid_ds 에서 고려되어야 할 멤버는 다음과 같다:

    	msg_perm.uid
    	msg_perm.gid
    	msg_perm.mode	/* 하위 9-bits */
    	msg_qbytes

    호출 프로세스의 유효(effective) user-ID는 슈퍼 유저나, 생성자 또는 메세지 큐의 소유자 중 하나여야 한다. 슈퍼 유저만이 시스템 파라미터인 MSGMNB값보다 크게 msg_qbytes를 올릴 수 있다.

IPC_RMID
    즉시 메세지 큐를 제거하며 해당 데이터 구조체는 기다리고 있는 모든 읽기 쓰기 프로세스를 깨운다.(에러를 반환하며, errno는 EIDRM으로 설정된다.) 호출 프로세스의 유효 사용자 ID는 슈퍼 유자나 생성자 또는 메세지 큐의 소유자 중 하나여야 한다.

반환값
성공시, 반환값 0이며, 그렇지 않으면 에러를 가리키는 errno 과 함께 -1 이 반환된다.

에러
실패가 반환될때, errno는 다음 값 중 하나로 설정된다.

EACCES
    cmd 인자는 IPC_STAT와 같지만 호출 프로세스는 메세지 큐 msqid에 대한 읽기 접근 허가권을 가지고 있지 않다.

EFAULT
    cmd 인자는 IPC_SET나 IPC_STAT 값을 가지고 있지만 buf에 의해 지정된 주소로 접근할 수 없다.

EIDRM
    메세지 큐가 제거 되었다.

EINVAL
    유효 하지 않은 cmd나 msqid.

EPERM
    cmd 인자는 IPC_SET나 IPC_RMID 값을 가지고 있지만 호출 프로세스의 유효 사용자 ID는 명령을 실행할 충분한 권한을 가지고 있지 않다. 이것은 또한 비 슈퍼-사용자 프로세스가 시스템 파라미터 MSGMNB에 의해 지정된 값보다 크게 msg_qbytes 값을 증가시키려고 시도하였을 때이다.

주의
IPC_INFO, MSG_STAT 그리고 MSG_INFO는 할당된 자원에 대한 정보를 제공하는 ipcs(8) 프로그램에 의해 사용된다. 앞으로 이것은 proc 파일 시스템 인터페이스를 위해서 필요에 따라 수정되거나 이동될 수도 있다.

호환
SVr4, SVID. SVID는 EIDRM 에러 조건을 문서화 하지 않았다.

관련 항목
ipc(5), msgget(2), msgsnd(2), msgrcv(2)

역자
정강훈 <skyeyes@soback.kornet.net>, 2000년 6월 19일