版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、MSG一、實(shí)驗(yàn)?zāi)康囊?、?shí)驗(yàn)?zāi)康?、了解什么是消息2、熟悉消息傳送的機(jī)理。二、實(shí)驗(yàn)內(nèi)容二、實(shí)驗(yàn)內(nèi)容消息的創(chuàng)建、發(fā)送和接收。使用系統(tǒng)調(diào)用msgget()msgsnd()msgrev()及msgctl()編制一長度為1k的消息發(fā)送和接收的程序三、實(shí)驗(yàn)內(nèi)容指導(dǎo)提示三、實(shí)驗(yàn)內(nèi)容指導(dǎo)提示(一)、什么是消息消息(message)是一個格式化的可變長的信息單元。消息機(jī)制允許由一個進(jìn)程給其它任意的進(jìn)程發(fā)送一個消息。當(dāng)一個進(jìn)程收到多個消息時,可將它們排成一
2、個消息隊(duì)列。消息使用二種重要的數(shù)據(jù)結(jié)構(gòu):一是消息首部,其中記錄了一些與消息有關(guān)的信息,如消息數(shù)據(jù)的字節(jié)數(shù);二個消息隊(duì)列頭表,其每一表項(xiàng)是作為一個消息隊(duì)列的消息頭,記錄了消息隊(duì)列的有關(guān)信息。1、消息機(jī)制的數(shù)據(jù)結(jié)構(gòu)(1)消息首部記錄一些與消息有關(guān)的信息,如消息的類型、大小、指向消息數(shù)據(jù)區(qū)的指針、消息隊(duì)列的鏈接指針等。(2)消息隊(duì)列頭表其每一項(xiàng)作為一個消息隊(duì)列的消息頭,記錄了消息隊(duì)列的有關(guān)信息如指向消息隊(duì)列中第一個消息和指向最后一個消息的指針
3、、隊(duì)列中消息的數(shù)目、隊(duì)列中消息數(shù)據(jù)的總字節(jié)數(shù)、隊(duì)列所允許消息數(shù)據(jù)的最大字節(jié)總數(shù),還有最近一次執(zhí)行發(fā)送操作的進(jìn)程標(biāo)識符和時間、最近一次執(zhí)行接收操作的進(jìn)程標(biāo)識符和時間等。2、消息隊(duì)列的描述符UNIX中,每一個消息隊(duì)列都有一個稱為關(guān)鍵字(key)的名字,是由用戶指定的;消息隊(duì)列有一消息隊(duì)列描述符,其作用與用戶文件描述符一樣,也是為了方便用戶和系統(tǒng)對消息隊(duì)列的訪問。(二)、涉及的系統(tǒng)調(diào)用1.msgget()創(chuàng)建一個消息,獲得一個消息的描述符。核
4、心將搜索消息隊(duì)列頭表,確定是否有指定名字的消息隊(duì)列。若無,核心將分配一新的消息隊(duì)列頭,并對它進(jìn)行初始化,然后給用戶返回一個消息隊(duì)列描述符,否則它只是檢查消息隊(duì)列的許可權(quán)便返回。系統(tǒng)調(diào)用格式:msgqid=msgget(keyflag)該函數(shù)使用頭文件如下:#include#includeintmsgrcv(msgqidmsgpsizetypeflag)intmsgqidsizeflagstructmsgbufmsgplongtype其中
5、,msgqidmsgpsizeflag與msgsnd中的對應(yīng)參數(shù)相似,type是規(guī)定要讀的消息類型,flag規(guī)定倘若該隊(duì)列無消息,核心應(yīng)做的操作。如此時設(shè)置了IPC_NOWAIT標(biāo)志,則立即返回,若在flag中設(shè)置了MS_NOERR,且所接收的消息大于size,則核心截斷所接收的消息。對于msgrcv系統(tǒng)調(diào)用,核心須完成下述工作:(1)對消息隊(duì)列的描述符和許可權(quán)等進(jìn)行檢查。若合法,就往下執(zhí)行;否則返回;(2)根據(jù)type的不同分成三種情
6、況處理:type=0,接收該隊(duì)列的第一個消息,并將它返回給調(diào)用者;type為正整數(shù),接收類型type的第一個消息;type為負(fù)整數(shù),接收小于等于type絕對值的最低類型的第一個消息。(3)當(dāng)所返回消息大小等于或小于用戶的請求時,核心便將消息正文拷貝到用戶區(qū),并從消息隊(duì)列中刪除此消息,然后喚醒睡眠的發(fā)送進(jìn)程。但如果消息長度比用戶要求的大時,則做出錯返回。4.msgctl()消息隊(duì)列的操縱。讀取消息隊(duì)列的狀態(tài)信息并進(jìn)行修改,如查詢消息隊(duì)列描
7、述符、修改它的許可權(quán)及刪除該隊(duì)列等。系統(tǒng)調(diào)用格式:msgctl(msgqidcmdbuf)本函數(shù)使用的頭文件如下:#include#include#include參數(shù)定義:intmsgctl(msgqidcmdbuf)intmsgqidcmdstructmsgqid_dsbuf其中,函數(shù)調(diào)用成功時返回0,不成功則返回1。buf是用戶緩沖區(qū)地址,供用戶存放控制參數(shù)和查詢結(jié)果;cmd是規(guī)定的命令。命令可分三類:(1)IPC_STAT。查詢有
8、關(guān)消息隊(duì)列情況的命令。如查詢隊(duì)列中的消息數(shù)目、隊(duì)列中的最大字節(jié)數(shù)、最后一個發(fā)送消息的進(jìn)程標(biāo)識符、發(fā)送時間等;(2)IPC_SET。按buf指向的結(jié)構(gòu)中的值,設(shè)置和改變有關(guān)消息隊(duì)列屬性的命令。如改變消息隊(duì)列的用戶標(biāo)識符、消息隊(duì)列的許可權(quán)等;(3)IPC_R。消除消息隊(duì)列的標(biāo)識符。msgqid_ds結(jié)構(gòu)定義如下:structmsgqid_dsstructipc_permmsg_perm許可權(quán)結(jié)構(gòu)shtpad1[7]由系統(tǒng)使用ushtmsg_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 發(fā)送與接收c
- 無線hart發(fā)送與接收代碼
- 實(shí)驗(yàn)六、多播發(fā)送與接收程序設(shè)計
- 發(fā)送和接收即時消息
- 低頻彈性波的發(fā)送與接收單元設(shè)計.pdf
- 鉆柱中聲波發(fā)送與接收電子系統(tǒng)的研究.pdf
- Android工業(yè)現(xiàn)場數(shù)據(jù)發(fā)送與接收平臺研發(fā).pdf
- 基于rf1100模塊的無線發(fā)送與接收系統(tǒng)【畢業(yè)設(shè)計】
- 操作系統(tǒng)實(shí)驗(yàn)
- 基于rf1100模塊的無線發(fā)送與接收系統(tǒng)的設(shè)計【畢業(yè)設(shè)計】
- 多入多出無線通信系統(tǒng)優(yōu)化發(fā)送與接收技術(shù)研究.pdf
- 操作系統(tǒng)linux主存管理操作系統(tǒng)實(shí)驗(yàn) 5
- 操作系統(tǒng)實(shí)驗(yàn)大綱
- 操作系統(tǒng)實(shí)驗(yàn)三
- 操作系統(tǒng)上機(jī)實(shí)驗(yàn)
- 操作系統(tǒng)實(shí)驗(yàn)2
- 操作系統(tǒng)實(shí)驗(yàn)一
- 畢業(yè)設(shè)計----汽車行駛信息發(fā)送與接收器的設(shè)計
- 計算機(jī)控制短消息的接收與發(fā)送.pdf
- 畢業(yè)論文--無線發(fā)送與接收模塊的步進(jìn)電機(jī)控制電路設(shè)計
評論
0/150
提交評論