新聞中心
什么是消息隊列?
站在用戶的角度思考問題,與客戶深入溝通,找到建鄴網(wǎng)站設計與建鄴網(wǎng)站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:做網(wǎng)站、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、虛擬空間、企業(yè)郵箱。業(yè)務覆蓋建鄴地區(qū)。
消息隊列提供了一種從進程向另一個進程發(fā)送一個數(shù)據(jù)塊的方法。每個數(shù)據(jù)塊都被認為是有一個類型,接收者進程的數(shù)據(jù)塊可以有不同的類型值。
消息隊列與管道的區(qū)別:消息隊列是基于消息的,而管道是基于字節(jié)流的,且消息隊列的讀取不一定是先入先出。
相關函數(shù)
創(chuàng)建新消息隊列或取得已存在消息隊列
返回值:成功,返回消息隊列的標識符
失敗,返回-1
第一個參數(shù):消息隊列對象的關鍵字,函數(shù)將它與已有的消息隊列對象的關鍵字進行比較來判斷消息 隊列是否已經創(chuàng)建。由函數(shù)ftok()得來。
第二個參數(shù):控制函數(shù)的具體操作。可以取以下幾個值:
IPC_CREAT:如果消息隊列不存在則創(chuàng)建,否則直接打開。
IPC_EXCL:單獨使用無意義。
IPC_CREAR | IPC_EXCL :消息隊列時新創(chuàng)建的。
3. ftok函數(shù)
函數(shù)ftok把一個已存在的路徑名和一個整數(shù)標識得轉換成一個key_t值,稱為IPC鍵。
key_t ftok(const char* patnname,int id);
pathname:路徑必須存在且可以訪問
id: 低8位
4. 向隊列讀/寫消息
msgsnd將數(shù)據(jù)放到消息隊列中,msgrcv從隊列中取消息
msqid: 消息隊列的標識符
msgp: 指向消息緩沖區(qū)的指針,此位置用來暫時存儲發(fā)送和接受的消息,是用戶定義的通用的結構。
msgsz:消息的大小
msgtyp:從消息隊列內讀取的消息形態(tài)。若為0,則消息隊列中的所有消息都被取完。
msgflg: msgflg為0時,msgsnd()和msgrcv()在隊列呈滿或空的情形時,采取阻塞等待的處理模式。
msgflg和常數(shù)連用時,msgsnd()執(zhí)行時若隊列滿,msgrcv()將不會阻塞,而是返回-1,若 執(zhí)行msgrcv(),則在消息隊列呈空時,等待不做返回-1.
5. 設置消息隊列的屬性
函數(shù)原型: int msgctl(int msgqid,int cmd,struct msqid_ds *buf);
對msgqid標識的消息隊列執(zhí)行cmd操作。cmd操作分三種:IPC_STAT,IPC_SET,IPC_RMID
IPC_STAT:該命令用來獲取消息隊列對應的msqid_ds數(shù)據(jù)結構,并將其保存到buf指定的地址空間。
IPC_SET:該命令用來設置消息隊列的屬性,要設置的屬性存儲在buf中。
IPC_RMID:從內核中刪除msqid標識的消息隊列。
6. 查看消息隊列 ipcs -q
刪除消息隊列 ipcrm -q semid
“comm.h”
“comm.c”
“client.c”
“server.c”
文章題目:進程間通信---消息隊列
標題網(wǎng)址:http://www.ef60e0e.cn/article/jcdsch.html