message queue에 있는 메세지의 개수를 알려고 합니다.

zieben의 이미지

결국 mqueue.h 대신에 msg.h를 사용해서
msgget(...)
msgsnd(...)
등의 함수를 사용하려고 합니다.
이제 문제가 현재 메세지큐에 들어있는 메세지의 개수를 알고싶은데요..
제가 가지고 있는 책에는 그에 대한 내용은 없는것 같습니다.

현재 메세지큐에 들어있는 메세지 개수를 알수 있는 함수가
msg.h에 있나요?

xian의 이미지

/* 리눅스의 메시지큐 정보 구조체입니다. */
struct msqid_ds
{
struct ipc_perm msg_perm; /* structure describing operation permission */
__time_t msg_stime; /* time of last msgsnd command */
unsigned long int __unused1;
__time_t msg_rtime; /* time of last msgrcv command */
unsigned long int __unused2;
__time_t msg_ctime; /* time of last change */
unsigned long int __unused3;
unsigned long int __msg_cbytes; /* 현재 메시큐에 들어있는 메시지 byte사이즈입니다. */
msgqnum_t msg_qnum; /* 현재 메시큐에 들어있는 메시지 갯수입니다. */
msglen_t msg_qbytes; /* max number of bytes allowed on queue */
__pid_t msg_lspid; /* pid of last msgsnd() */
__pid_t msg_lrpid; /* pid of last msgrcv() */
unsigned long int __unused4;
unsigned long int __unused5;
};

아래와 같이 코딩하시면 현재 메시지큐의 메시지 갯수를 알아낼 수 있습니다.
---------------------------------------------------------------------
struct msqid_ds tmpbuf;

if( msgctl( qid, IPC_SET, &tmpbuf) == -1)
{
return(-1);
}

printf("메시지 갯수 : %d\n", tmpbuf.msg_qnum);
----------------------------------------------------------------------
직접 실행해 보지는 않았지만 이런식으로 하면됩니다.

M.W.Park의 이미지

ipcs 에서 나오는 메시지 개수를 말하는 건가요?

-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

익명 사용자의 이미지

안녕하세요.

윗분처럼 ipcs에서 나오는 갯수를 system call로 알고 싶으신 거라면 msgctl을 사용하시면 됩니다.

그럼 즐거운 하루 되세요. 이만...

eminency의 이미지

msgctl 함수를 써서.. IPC_STAT를 인자로 주면 얻어오는 struct msqid_ds 구조체의 msg_qnum 필드가 원하시는 정보가 아닌가 싶습니다.

자세한 것은 man msgctl 해보세요.

노루가 사냥꾼의 손에서 벗어나는 것 같이, 새가 그물치는 자의 손에서 벗어나는 것 같이 스스로 구원하라 -잠언 6:5