linux消息队列的使用
生活随笔
收集整理的這篇文章主要介紹了
linux消息队列的使用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
消息隊列
*消息隊列是內(nèi)核地址空間中的內(nèi)部鏈表,通過內(nèi)核在各個進程之間傳遞的內(nèi)容。消息順序發(fā)送到消息隊列中,每個消息隊列都有IPC標識符唯一地進行標識。
msgbuf結(jié)構(gòu)
struct msgbuf{long mtype; //消息類型char mtext[1]; //消息數(shù)據(jù) };msgid_ds結(jié)構(gòu)
struct msqid_ds{struct ipc_perm msg_perm;time_t msg_stime; //發(fā)送到隊列的最后一個消息的時間戳time_t msg_rtime; //從隊列中獲取的最后一個消息的時間戳time_t msg_ctime; //對隊列進行最后一次變動的時間戳unsigned long __msg_cbytes; //在隊列上所駐留的字節(jié)總數(shù)msgqnum_t msg_qnum; //當前處于隊列中的消息數(shù)目msglen_t msg_qbytes; //隊列中能容納的字節(jié)的最大數(shù)目pid_t msg_lspid //發(fā)送最后一個消息進程的PIDpid_t msg_lrpid //接收最后一個消息進程的PID };ipc_perm結(jié)構(gòu)
struct ipc_perm{key_t key; //函數(shù)msget()使用的鍵值uid_t uid; //用戶的UIDgid_t gid; //用戶的GIDuid_t cuid; //建立者的UIDgid_t cgid; //建立者的GIDunsigned short mode; //權(quán)限unsigned short seq; //序列號 };鍵值構(gòu)建ftok()函數(shù)
#include<sys/types.h> #include<sys/ipc.h> key_t ftok(const char *pathname, int proj_id); //pathname必須是已經(jīng)存在的目錄獲得消息msgget()函數(shù)
#include<sys/types.h> #include<sys/ipc.h> #include<sys/msg.h> int msgget(key_t key, int msgflg); /*第一個參數(shù)可以用ftok()函數(shù)生成 msgflg參數(shù): 1.IPC_CREAT 如果內(nèi)核中不存在該消息隊列,則創(chuàng)建它 2.IPC_EXCL 當和IPC_CREAT一起使用時,如果隊列早已存在則將出錯 */發(fā)送消息msgsend()函數(shù)
#include<sys/types.h> #include<sys/ipc.h> #include<sys/msg.h> int msgsend(int msqid, const void *msgp, size_t msgsz, int msgflg); /* 第一個參數(shù)從msgget()獲得 第二個參數(shù)指向一個消息緩沖區(qū) 第三個參數(shù)消息的大小,以字節(jié)為單位,不包括消息類型的長度(4字節(jié)) 第四個參數(shù)設(shè)置成0表示忽略,設(shè)置成IPC_NOWAIT,如果消息隊列已經(jīng)滿了,則消息不寫進隊列中,如果不設(shè)置則阻塞直到可以寫消息為止 */接收消息msgrcv()函數(shù)
#include<sys/types.h> #include<sys/ipc.h> #include<sys/msg.h> ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); /* 第一個參數(shù)從msgget()獲得 第二個參數(shù)消息緩沖變量的地址 第三個參數(shù)消息的大小,以字節(jié)為單位,不包括消息類型的長度(4字節(jié)) 第四個參數(shù)指定要從隊列中獲取的消息類型,內(nèi)核查找隊列中匹配類型的第一個到達的消息,如果傳0則返回隊列最早的消息,不管類型 第五個參數(shù)設(shè)置成IPC_NOWAIT,如果消息隊列沒有消息則返回ENOMSG,否則進程將阻塞直到滿足條件的消息到達,如果客戶等待消息的時候隊列被刪除則返回EIDRM,如果進程阻塞并等待消息的時候捕獲信號則返回EINTR */轉(zhuǎn)載于:https://www.cnblogs.com/zzmv/p/5689787.html
總結(jié)
以上是生活随笔為你收集整理的linux消息队列的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: toString()和强制类型转换(St
- 下一篇: C++连接mysql的两种方式(ADO连