struct msqid_ds
;struct ipc_perm ;
1. 主要函式的介紹( #include )
1) int msgget(key_t key, int flag);
引數: key: 訊息佇列的key值,通過ftok獲得。
flag: 標誌位
返回 : 成功返回訊息佇列描述字,否則返回-1。
注:該函式初始化結構msqid_ds 成員:
* ipc_perm中的mode成員按flag進行設定.
* msg_qnum, msg_lspid, msg_lrpid, msg_stime和msg_rtime都設定為0.
* msg_ctime設定為當前時間.
* msg_qbytes設定為系統限制值.
引數key設定成常數ipc_private並不意味著其他程序不能訪問該訊息佇列,只意味著即將建立新的訊息佇列。
2) int msgctl(int msqid, int cmd, struct msgqid_ds *buf);
引數: cmd引數說明對msqid指定的佇列要執行的命令
ipc_stat: 取此佇列的msqid_ds結構, 並將它存放在buf指向的結構中.
ipc_set: 按由buf指向結構中的值, 設定與此佇列相關結構中的msg_perm.uid, msg_perm.gid, msg_perm.mode和msg_qbytes. 該命令只有下列兩種程序可以執行:
o 有效使用者id等於msg_perm.cuid或msg_per.uid.
o 具有超級使用者特權的程序.
ipc_rmid: 從系統中刪除該訊息佇列以及仍在該佇列中的所有資料. 執行許可權同上.
返回: 成功返回0,否則返回-1。
3 ) int msgsnd(int msqid, const void *msg_ptr, size_t msg_sz, int msg***)
引數: msgid,是由msgget函式所返回的訊息佇列識別符號
msg_ptr,是乙個指向要傳送訊息的指標,正如前面所描述的,這個訊息必須以long int型別開始。
msg_sz,是由msg_ptr所指向的訊息的尺寸。這個尺寸必須不包含long int訊息型別
msg***,控制如果當前訊息佇列已滿或是達到了佇列訊息的系統限制時如何處理
如果msg***標記設定了ipc_nowait,函式就會立即返回而不傳送訊息,並且返回值為-1。
如果msg***標記清除了ipc_nowait標記,傳送程序就會被掛起,等待佇列中有可用的空間
返回: 如果成功,函式會返回0,如果失敗,則會返回-1。如果呼叫成功,系統就會複製乙份訊息資料並將其放入訊息佇列中。
4 ) int msgrcv(int msqid, void *msg_ptr, size_t msg_sz, long int msgtype, int msg***);
引數: msqid,是由msgget函式所返回的訊息佇列標記符
msg_ptr,是乙個指向將要接收訊息的指標,這個訊息必須以long int型別開始。
msg_sz,是由msg_ptr所指向的訊息的尺寸,並不包含long int訊息型別
msgtype,是乙個long int型別,允許乙個接收優先順序形式的實現。
如果msgtype的值為0,佇列中第乙個可用的訊息就會被接收。
如果其值大於0,具有相同訊息型別的第乙個訊息就會被接收。
如果其值小於0,第乙個具有相同型別或是小於msgtype絕對值的訊息就會被接收。
整理幾個好用的函式,容器
1.二分查詢upper bound 和lower bound vector iterator it lower bound v.begin v.end 3 返回vector中第乙個大於 等於 3的數的指標 int pos lower bound v.begin v.end 3 v.begin 得到在...
C語言 佇列演示(佇列的幾個函式)
佇列演示 佇列的幾個函式 typedef struct queue 佇列的初始化函式 void queue init queue p queue 佇列清理函式 void queue deinit queue p queue 計算數字個數 int queue size const queue p qu...
MFC訊息迴圈中幾個函式的差異
windows程式設計師因該都知道訊息迴圈的!本人曾經寫過類似於此篇的文章,無奈當時沒有去看多執行緒,講的比較生硬,也許受到眾多讀者的批判或質疑,而且那個使用者的密碼也忘記了,無法修改,只能舊事重提!這次主要講解4個 2對 函式 傳送訊息的函式和接受訊息的函式各2個 1 傳送訊息的函式 這裡主要講 ...