2014025630《嵌入式程序设计》第七周学习总结
2014025630《嵌入式程序設(shè)計》第七周學(xué)習(xí)總結(jié)
教材學(xué)習(xí)內(nèi)容總結(jié)
有名管道(FIFO)
命名管道也被稱為FIFO文件,是一種特殊的文件。由于linux所有的事物都可以被視為文件,所以對命名管道的使用也就變得與文件操作非常統(tǒng)一。
無名管道應(yīng)用的一個重大限制是它沒有名字,因此,只能用于具有親緣關(guān)系的進程間通信,在有名管道(named pipe或FIFO)提出后,該限制得到了克服。FIFO不同于管道之處在于它提供一個路徑名與之關(guān)聯(lián),以FIFO的文件形式存在于文件系統(tǒng)中。這樣,即使與FIFO的創(chuàng)建進程不存在親緣關(guān)系的進程,只要可以訪問該路徑,就能夠彼此通過FIFO相互通信(能夠訪問該路徑的進程以及FIFO的創(chuàng)建進程之間),因此,通過FIFO不相關(guān)的進程也能交換數(shù)據(jù)。值得注意的是,FIFO嚴(yán)格遵循先進先出(first in first out),對管道及FIFO的讀總是從開始處返回數(shù)據(jù),對它們的寫則把數(shù)據(jù)添加到末尾。它們不支持諸如lseek()等文件定位操作。
管道的緩沖區(qū)是有限的(管道制存在于內(nèi)存中,在管道創(chuàng)建時,為緩沖區(qū)分配一個頁面大小)
管道所傳送的是無格式字節(jié)流,這就要求管道的讀出方和寫入方必須事先約定好數(shù)據(jù)的格式,比如多少字節(jié)算作一個消息(或命令、或記錄)等等
FIFO往往都是多個寫進程,一個讀進程。
消息隊列
“消息隊列”是在消息的傳輸過程中保存消息的容器。消息被發(fā)送到隊列中。“消息隊列”是在消息的傳輸過程中保存消息的容器。消息隊列管理器在將消息從它的源中繼到它的目標(biāo)時充當(dāng)中間人。隊列的主要目的是提供路由并保證消息的傳遞;如果發(fā)送消息時接收者不可用,消息隊列會保留消息,直到可以成功地傳遞它。
函數(shù)格式
msgsnd()函數(shù)語法要點
msgsnd()函數(shù)原型為:
int msgsnd(int msqid, const void msgp, size_t msgsz, int msgflg)
msqid:消息隊列的隊列 ID
msgp:指向消息結(jié)構(gòu)的指針。
msgsz:消息正文的字節(jié)數(shù)(不包括消息類型指針變量)
msgflg:若為IPC_NOWAIT 若消息無法立即發(fā)送(比如:當(dāng)前消息隊列已滿),函數(shù)會立即返回。若為0: msgsnd 調(diào)阻塞直到發(fā)送成功為止。
msgrcv()函數(shù)語法要點
msgrcv()函數(shù)原型為:
int msgrcv(int msgid, void *msgp, size_t msgsz, long int msgtyp, int msgflg)
msqid:消息隊列的隊列 ID
msgp:消息緩沖區(qū), 同于 msgsnd()函數(shù)的 msgp
msgsz:消息正文的字節(jié)數(shù)(不包括消息類型指針變量)
msgtyp:0:接收消息隊列中第一個消息;大于 0:接收消息隊列中第一個類型為 msgtyp 的消息;小于 0:接收消息隊列中第一個類型值不小于 msgtyp 絕對值
且類型值又最小的消息
msgflg:MSG_NOERROR:若返回的消息比 msgsz 字節(jié)多,則消息就會截短到 msgsz 字節(jié),且不通知消息發(fā)送進程;IPC_NOWAIT 若在消息隊列中并沒有相應(yīng)類型的消息可以接收,則函數(shù)立即返回;0: msgsnd()調(diào)用阻塞直到接收一條相應(yīng)類型的消息為止。
其他(感悟、思考等,可選)
本周的學(xué)習(xí)讓我學(xué)會了有名管道讀與寫的操作,學(xué)會了四個重要函數(shù),為以后的學(xué)習(xí)奠定了良好的基礎(chǔ)
參考資料
- 《嵌入式應(yīng)用程序設(shè)計》學(xué)習(xí)指導(dǎo)
- ...
轉(zhuǎn)載于:https://www.cnblogs.com/wly4/p/7003557.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的2014025630《嵌入式程序设计》第七周学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: chrome更新flash player
- 下一篇: Jira 自定义工作流