目錄
一:訊息佇列
1.1定義
1.2設計方案
1.3知識了解
二:**實現
2.1傳送訊息
2.2取用訊息
2.3測試執行
訊息佇列是訊息的鏈結表,儲存在核心中,由訊息佇列識別符號標識。
如圖所示:先呼叫msgget()獲取乙個已存在,或者 建立乙個新的佇列。a程序負責傳送某一型別的資料,b程序負責接受相應型別的資料。
一:相關結構
①訊息結構:
//假設傳送的最長訊息是512個位元組
②每個訊息佇列都會維護乙個相關資料結構:msqid_ds
//訊息佇列維護資訊。
struct msqid_ds
二:相關函式①函式:msgget
標頭檔案 函式原型:#include
int msgget(key_t key,int flag)
引數:key:用於變換成乙個識別符號(id)
flag:許可權,以及各種控制資訊的指定。
功能:建立乙個新佇列或者開啟乙個現有佇列。(主要是和其他函式配套使用,msgctl,msgsnd,msgrcv)。
函式返回值:成功返回訊息佇列id,出錯返回-1.
②函式:msgctl
函式原型:int msgctl ( int msgid, int cmd , struct msqid_ds *buf);
函式引數:1 msgid :佇列編號
2 cmd :(幻數),用於指定命令,ipc_stat,ipc_set,ipc_rmid.
3 buf:指向結構體的指標。
函式功能:對佇列進行多種操作。
③函式:msgsnd
函式原型:
int msgsnd ( int msgid , const void* ptr , size_t nbytes , int flag)
函式引數:1 msgid:佇列編號
2 ptr :指向乙個mesg的結構體(本結構體不是標頭檔案提供的)
3 nbytes: 訊息大小。
4 flag(幻數),用於指定命令,ipc_nowait(非阻塞標誌)。
函式功能和返回值:將資料傳送到訊息佇列中:
成功返回0,失敗返回-1.
④函式:msgrcv
函式原型:
int msgrcv ( int msgid , void* ptr , size_t nbytes,long type , int flag);
函式引數:
msgid 佇列編號
ptr 指向乙個mesg結構體指標
nbytes 訊息大小
type 訊息型別
flag(幻數) 用於制定命令,ipc_nowait(非阻塞標誌)。
函式功能和返回值:
從訊息佇列中取資料。 成功,返回訊息佇列資料部分的長度,否則返回-1。
IPC 訊息佇列
include int msgget key t key,int msg 返回值 若成功,返回訊息佇列id 若出錯返回 1 與其他ipc機制一樣,需要提供乙個鍵值key來命名某個特定的訊息佇列。可通過ftok 來生成。msg 表示訊息佇列訪問許可權。可與兩個巨集配合進行操作 ipc creat 如果...
IPC 訊息佇列
訊息佇列可以認為是乙個訊息列表。執行緒可以往訊息佇列中放置訊息或者取出訊息。每個訊息都是一條記錄,由傳送者賦予乙個優先順序。乙個程序在往乙個訊息佇列中寫入訊息之前,不需要有某個程序在該佇列上等待訊息到達 這跟管道和fifo是相反的 訊息佇列具有隨核心的持續性,也就是說在核心重新啟動之前,不管發訊息的...
IPC之訊息佇列
訊息佇列缺點 1.如果程序建立了乙個訊息佇列,在該佇列中放入了幾則訊息,然後終止,但是該訊息佇列及其內容並不會被刪除。直到出現一下情況 某個程序呼叫msgrcv或 msgctl讀訊息或刪除訊息佇列,某個程序執行ipcrm 1 命令刪除訊息佇列,或由正在啟動的系統刪除訊息佇列。2.訊息佇列有大小限制,...