이 함수는 key를 번호로 가지는 메시지큐(:12)에 대한 식별번호를 리턴한다. msgflg로 IPC_CREAT를 사용하면 새로운 메시지큐를 생성하게 된다. IPC_CREATE와 IPC_EXCL을 함께 사용할경우 만약 key를 가지는 메시지큐가 이미 존재하면 -1 을 리턴하게 된다. open(2) 시스템콜(:12)의 O_CREAT와 O_EXCL을 함께 사용할때와 동일한 효과를 보여준다.
msgflg의 하위 9비트는 메시지큐에 대한 접근권한을 정의하기 위해 사용된다. chmod(2)에 사용되는 것과 같은 형태를 사용한다. 단 실행허가는 사용되지 않는다. (메시지큐는 실행되기 위한게 아니므로 필요가 없기도 하다)
이 함수(:12)를 이용해서 메시지큐를 생성하게 되면, 메시지큐 데이터 구조체인 msqid_ds를 다음과 같이 추기화 한다.
msg_perm.cuid와 msg_perm.uid는 호출 프로세스의 유효 사용자-ID로 설정된다.
msg_perm.cgid와 msg_perm.gid는 호출 프로세스의 유효 그룹-ID로 설정된다.
msg_perm.mode의 하위 9비트는 msgflg의 하위 9비트로 설정된다.
msg_qnum, msg_lspid, msg_lrpid, msg_stime 그리고 msg_rtime는 0으로 설정된다.
msg_ctime은 현재 시간으로 설정된다.
msg_qbytes는 시스템 제한값 MSGMNB으로 설정된다.
msquid_ds는 다음과 같이 선언되어 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct msqid_ds
{
struct ipc_perm msg_perm; /* 권한 */
__time_t msg_stime; /* 마지막으로 msgsnd(2)를호출한시간 */
unsigned long int __unused1;
__time_t msg_rtime; /* 마지막으로 msgrcv(2)를호출한시간 */
unsigned long int __unused2;
__time_t msg_ctime; /* 마지막으로변경된시간 */
unsigned long int __unused3;
unsigned long int __msg_cbytes; /* current number of bytes on queue */
msgqnum_t msg_qnum; /* 큐에있는메시지의갯수 */
msglen_t msg_qbytes; /* 큐의최대허용크기 - byte(:12) */
__pid_t msg_lspid; /* 마지막으로 msgsnd()를호출한프로세스(:12)의 PID */
__pid_t msg_lrpid; /* 마지막으로 msgrcv()를호출한프로세스의 PID */
사용법
설명
리턴값
ERRORS
예제
Recent Posts
Archive Posts
Tags