Linux下獲取消息隊列的信息
阿新 • • 發佈:2017-08-01
cell cpp container eat comm lin containe code ron
在程序中想要獲取消息隊列長度可使用消息隊列的屬性這個數據結構:
需要#include <sys/msg.h>
An instance of the ipc_perm structure, which is defined for us in linux/ipc.h. This holds the permission information for the message queue, including the access permissions, and information about the creator of the queue (uid, etc).
msg_first
Link to the first message in the queue (the head of the list).
msg_last
Link to the last message in the queue (the tail of the list).
msg_stime
Timestamp (time_t) of the last message that was sent to the queue.
msg_rtime
Timestamp of the last message retrieved from the queue.
msg_ctime
Timestamp of the last ``change‘‘ made to the queue (more on this later).
wwait
and
rwait
Pointers into the kernel‘s wait queue. They are used when an operation on a message queue deems the process go into a sleep state (i.e. queue is full and the process is waiting for an opening).
msg_cbytes
Total number of bytes residing on the queue (sum of the sizes of all messages).
msg_qnum
Number of messages currently in the queue.
msg_qbytes
Maximum number of bytes on the queue.
msg_lspid
The PID of the process who sent the last message.
msg_lrpid
The PID of the process who retrieved the last message.
/* one msqid structure for each queue on the system */
struct msqid_ds {
struct ipc_perm msg_perm;
struct msg *msg_first; /* first message on queue */
struct msg *msg_last; /* last message in queue */
time_t msg_stime; /* last msgsnd time */
time_t msg_rtime; /* last msgrcv time */
time_t msg_ctime; /* last change time */
struct wait_queue *wwait;
struct wait_queue *rwait;
ushort msg_cbytes; //當前消息隊列中的字節數
ushort msg_qnum; //當前消息隊列中的消息個數
ushort msg_qbytes; /* max number of bytes on queue */ ushort msg_lspid; /* pid of last msgsnd */
ushort msg_lrpid; /* last receive pid */
};
|
簡單程序示例:
struct msqid_ds msg_info;
if (msgctl(msgQid,IPC_STAT,&msg_info) == ERROR)
{
return ERROR;
}
else
{
return msg_info.msg_qnum;
}
|
數據結構各個參數詳解如下: msg_perm
Linux下獲取消息隊列的信息