消息隊列是一種非常常見的進程間通信方式。
使用消息隊列也很簡單。首先是創(chuàng)建消息隊列,消息隊列由內(nèi)核來維護,創(chuàng)建成功后,用命令ipcs可以看到。一個進程往消息隊列中寫入數(shù)據(jù),另一個進程從消息隊列中讀取數(shù)據(jù)。乍一看,跟管道的讀寫操作一樣。
但是它比管道更加實用,發(fā)送數(shù)據(jù)的時候,可以指定數(shù)據(jù)的類型。也就是說,發(fā)出去的數(shù)據(jù)被分成了兩份,一份是具體的數(shù)據(jù),另一份用來表示類型。這樣即使有多個進程來讀取數(shù)據(jù),只要各自指定了類型,數(shù)據(jù)就不會亂。
而管道卻沒有這么靈活,如果有多個進程讀取管道數(shù)據(jù),先讀的進程就能獲得全部數(shù)據(jù)。
消息隊列主要涉及這么幾個函數(shù)。創(chuàng)建消息隊列使用msgget,第一個參數(shù)是key,用于區(qū)分內(nèi)核中不同的消息隊列,第二個參數(shù)表示創(chuàng)建消息隊列且消息隊列不存在。
發(fā)送數(shù)據(jù)使用msgsnd,參數(shù)分別是消息隊列標識、發(fā)送的數(shù)據(jù)、數(shù)據(jù)的長度以及標志位。
接收數(shù)據(jù)使用msgrecv,多了一個參數(shù)表示數(shù)據(jù)的類型。
運行程序,一個進程寫入數(shù)據(jù),另一個進程就能把數(shù)據(jù)讀取出來。
這就是進程間通信的消息隊列,他比管道和信號更加實用,如果有多個進程需要傳輸數(shù)據(jù),用消息隊列更加合適。
-
消息隊列
+關(guān)注
關(guān)注
0文章
34瀏覽量
3278
原文標題:進程間通信之消息隊列
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
RDMA設計43:隊列刪除及連接斷開功能測試
RDMA設計25:隊列管理模塊之發(fā)送模塊詳細設計分析
RDMA設計24:隊列管理模塊設計
進程的控制
C語言的循環(huán)隊列
優(yōu)先級隊列介紹
Linux進程間通信(IPC)全解析:從管道到?Socket,一篇講透
基于環(huán)形隊列的UART收發(fā)回顯實驗
【HZ-T536開發(fā)板免費體驗】—— linux 進程創(chuàng)建
RabbitMQ消息隊列解決方案
Linux進程狀態(tài)詳解
進程間通信的消息隊列介紹
評論