函式格式格式,頭檔案,函式功能,參數定義,返回值,說明,
函式格式格式
msgrev(msgqid,msgp,size,type,flag)
頭檔案
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
函式功能
用msgrev函式系統調用從msqid訊息佇列中讀取一條信息並將其放入訊息段指針msgp指向的結構。msgsz大且msgflg&MSG_NOERROR為真,則按msgsz的大小截斷而不通知調用進程,從訊息佇列中取得指定類型的訊息。
參數定義
int msgrev(int msgqid,struct msgbuf *msgp,int size,long type,int flag)
其中msgqid,msgp,size,flag與msgsand中對應參數相似,type是規定要讀的訊息類型,flag規定尚若該佇列無訊息,核心應做的操作,如此時設定了IPC_NOWAIT標誌,則立即返回,若flag中設定了MS_NOERROR,且所接收的訊息 大於size,則核心截斷所接收的訊息。
對於msgrcv系統調用,核心必須完成下述工作
1、對訊息佇列的描述符和許可權等進行檢查,若合法,就往下執行;否則返回。
2、根據type的不同分成三種情況處理:
type=0,接受該佇列的第一個訊息,並將它返回給調用者
type>0,接受類型type的第一個訊息
type<0,接受小於等於type絕對值的最低類型的第一個訊息
3、當所返回訊息大小等於或小於用戶的請求時,核心便將訊息正文拷貝到用戶區,並從訊息佇列中刪除此訊息,然後喚醒睡眠的傳送進程,但如果訊息長度比用戶要求的大時,則做出錯返回。
返回值
調用成功則返回值等於接受到實際訊息的正文位元組數,不成功則返回-1。
說明
系統調用由msqid指定的訊息佇列中讀取一個由msgtyp指定類型的訊息到由msgo指向的緩衝區,通用的,該緩衝區的結構如前所訴,包括訊息類型和訊息正文,msgsz為可接受的訊息正文的位元組數,若接受到的訊息正文的長度大於msgsz,則會被揭短到msgsz直接為止,(當訊息標誌msgflg&MSG_NOERROR為真時),截掉的部分將被丟失,而且不通知訊息傳送進程。