msgsnd函數
參數
msgid: 由msgget函數傳回的消息隊列辨別碼, 也可以是通過ipcs指令查詢出來的一個已經存在的消息隊列的ID号
msgp:是一個指針,指針指向準備發送的消息,
msgsz:是msgp指向的消息長度, 注意:這個長度不含儲存消息類型的那個long int長整型
msgflg:控制着目前消息隊列滿或到達系統上限時将要發生的事情,如果msgflg = IPC_NOWAIT表示隊列滿不等待,傳回EAGAIN錯誤。
消息結構在兩方面受到制約: (1)它必須小于系統規定的上限值(MSGMAX); (2)它必須以一個long int長整數開始,接收者函數将利用這個長整數确定消息的類型;
msgrcv函數
msgid: 由msgget函數傳回的消息隊列辨別碼
msgp:是一個指針,指針指向準備接收的消息;
msgsz:是msgp指向的消息長度,這個長度不含儲存消息類型的那個long int長整型
msgtype:它可以實作接收優先級的簡單形式(見下圖)
msgflg:控制着隊列中沒有相應類型的消息可供接收時将要發生的事(見下圖)
傳回值:
成功->傳回實際放到接收緩沖區裡去的位元組數(注意: 此處并不包含msgbuf中的mtype的長度[man-page: msgrcv() returns the number of bytes actually copied into the mtext array.]);
失敗->傳回-1;
msgtyp參數
msgtyp=0
傳回隊列第一條資訊
msgtyp>0
傳回隊列第一條類型等于msgtype的消息
msgtyp<0
傳回隊列第一條類型小于等于(<=)msgtype絕對值的消息,并且是滿足條件的消息類型最小的消息(按照類型進行排序的順序進行接收消息)
msgflg參數
msgflg=IPC_NOWAIT
隊列沒有可讀消息不等待,傳回ENOMSG錯誤。
msgflg=MSG_NOERROR
消息大小超過msgsz(msgrcv 函數的第三個參數)時被截斷, 并且不會報錯
msgtyp>0且msgflg=MSG_EXCEPT
接收類型不等于msgtype的第一條消息
[附]-getopt函數的用法