消息隊(duì)列是一種非常常見的進(jìn)程間通信方式。
使用消息隊(duì)列也很簡(jiǎn)單。首先是創(chuàng)建消息隊(duì)列,消息隊(duì)列由內(nèi)核來維護(hù),創(chuàng)建成功后,用命令ipcs可以看到。一個(gè)進(jìn)程往消息隊(duì)列中寫入數(shù)據(jù),另一個(gè)進(jìn)程從消息隊(duì)列中讀取數(shù)據(jù)。乍一看,跟管道的讀寫操作一樣。
但是它比管道更加實(shí)用,發(fā)送數(shù)據(jù)的時(shí)候,可以指定數(shù)據(jù)的類型。也就是說,發(fā)出去的數(shù)據(jù)被分成了兩份,一份是具體的數(shù)據(jù),另一份用來表示類型。這樣即使有多個(gè)進(jìn)程來讀取數(shù)據(jù),只要各自指定了類型,數(shù)據(jù)就不會(huì)亂。
而管道卻沒有這么靈活,如果有多個(gè)進(jìn)程讀取管道數(shù)據(jù),先讀的進(jìn)程就能獲得全部數(shù)據(jù)。
消息隊(duì)列主要涉及這么幾個(gè)函數(shù)。創(chuàng)建消息隊(duì)列使用msgget,第一個(gè)參數(shù)是key,用于區(qū)分內(nèi)核中不同的消息隊(duì)列,第二個(gè)參數(shù)表示創(chuàng)建消息隊(duì)列且消息隊(duì)列不存在。
發(fā)送數(shù)據(jù)使用msgsnd,參數(shù)分別是消息隊(duì)列標(biāo)識(shí)、發(fā)送的數(shù)據(jù)、數(shù)據(jù)的長(zhǎng)度以及標(biāo)志位。
接收數(shù)據(jù)使用msgrecv,多了一個(gè)參數(shù)表示數(shù)據(jù)的類型。
運(yùn)行程序,一個(gè)進(jìn)程寫入數(shù)據(jù),另一個(gè)進(jìn)程就能把數(shù)據(jù)讀取出來。
這就是進(jìn)程間通信的消息隊(duì)列,他比管道和信號(hào)更加實(shí)用,如果有多個(gè)進(jìn)程需要傳輸數(shù)據(jù),用消息隊(duì)列更加合適。
-
消息隊(duì)列
+關(guān)注
關(guān)注
0文章
34瀏覽量
3216
原文標(biāo)題:進(jìn)程間通信之消息隊(duì)列
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)30: NVMe 設(shè)備模型設(shè)計(jì)
【HZ-T536開發(fā)板免費(fèi)體驗(yàn)】—— linux 進(jìn)程創(chuàng)建
NVMe IP高速傳輸卻不依賴XDMA設(shè)計(jì)之九:隊(duì)列管理模塊(上)

RabbitMQ消息隊(duì)列解決方案
從 app_gatt_callback調(diào)用這個(gè)隊(duì)列推送函數(shù)時(shí),程序出現(xiàn)了硬故障怎么解決?
RDMA簡(jiǎn)介6之RoCEV2連接管理
RDMA簡(jiǎn)介5之RoCE V2隊(duì)列分析
NVME控制器之隊(duì)列管理模塊
NVME控制器之隊(duì)列管理模塊

Linux進(jìn)程狀態(tài)詳解

DLPC150和DMD2010NIR間的通信協(xié)議是什么?
JavaWeb消息隊(duì)列使用指南
深入Linux進(jìn)程管理:提升效率與穩(wěn)定性的關(guān)鍵方法

Linux用戶身份與進(jìn)程權(quán)限詳解

評(píng)論