1. 程式人生 > >Linux下獲取消息隊列的信息

Linux下獲取消息隊列的信息

cell cpp container eat comm lin containe code ron

在程序中想要獲取消息隊列長度可使用消息隊列的屬性這個數據結構: 需要#include <sys/msg.h>

/* 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
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.

Linux下獲取消息隊列的信息