消息隊列是一種非常常見的進程間通信方式。
使用消息隊列也很簡單。首先是創建消息隊列,消息隊列由內核來維護,創建成功后,用命令ipcs可以看到。一個進程往消息隊列中寫入數據,另一個進程從消息隊列中讀取數據。乍一看,跟管道的讀寫操作一樣。
但是它比管道更加實用,發送數據的時候,可以指定數據的類型。也就是說,發出去的數據被分成了兩份,一份是具體的數據,另一份用來表示類型。這樣即使有多個進程來讀取數據,只要各自指定了類型,數據就不會亂。
而管道卻沒有這么靈活,如果有多個進程讀取管道數據,先讀的進程就能獲得全部數據。
消息隊列主要涉及這么幾個函數。創建消息隊列使用msgget,第一個參數是key,用于區分內核中不同的消息隊列,第二個參數表示創建消息隊列且消息隊列不存在。
發送數據使用msgsnd,參數分別是消息隊列標識、發送的數據、數據的長度以及標志位。
接收數據使用msgrecv,多了一個參數表示數據的類型。
運行程序,一個進程寫入數據,另一個進程就能把數據讀取出來。
這就是進程間通信的消息隊列,他比管道和信號更加實用,如果有多個進程需要傳輸數據,用消息隊列更加合適。
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
消息隊列
+關注
關注
0文章
34瀏覽量
3270
原文標題:進程間通信之消息隊列
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
RDMA設計25:隊列管理模塊之發送模塊詳細設計分析
發送隊列存儲為所有發送隊列共用的存儲空間,根據用戶環境和開發板環境不同可由 BRAM、URAM 或 LUTRAM 實現。發送隊列管理單元則負責管理這個存儲空間,并處理用戶指令和發送隊列
RDMA設計17:隊列管理模塊設計2
。
(2)接收隊列
接收隊列由一個接收隊列管理單元組成。與發送隊列類似的是,接收隊列管理單元也由若干表單構成,其中包括 RQ1 表單和用戶
發表于 01-04 14:54
C語言的循環隊列
data;
}
return -1; // Buffer is empty
}
循環隊列是一種高效的數據結構,適用于緩沖區和數據流應用,例如串口通信接收緩沖。
發表于 12-12 08:28
優先級隊列介紹
隊列(Queue)的知識點:「概念」:隊列是一種先進先出(FIFO)的數據結構,類似于排隊的概念。「基本操作」:enqueue(item): 將元素添加到隊列的末尾。dequeue(): 從隊
發表于 11-26 07:56
Linux進程間通信(IPC)全解析:從管道到?Socket,一篇講透
在?Linux?世界里,進程并非孤立存在。無論是后臺服務協作(如?Web?服務器與數據庫)、命令行工具聯動(如ps | grep),還是復雜應用的模塊通信,都離不開 進程間
基于環形隊列的UART收發回顯實驗
在實際項目開發中,由于有些串口不具備FIFO(如SCI1和SCI2)或FIFO的buffer比較小,這可能會在數據處理速度小于數據接收速度的時候,導致數據的丟失。因此我們可以設計一個隊列來避免這一
【HZ-T536開發板免費體驗】—— linux 進程創建
Linux進程通信方式有這幾種:
1。管道
2。信號量
3。消息隊列
4。共享內存
在本帖子中,我會講解fork(),exit()系統調用的實踐。通過應用編程來實現系統調用。
1,進程
發表于 09-01 20:49
RabbitMQ消息隊列解決方案
在現代分布式系統架構中,消息隊列作為核心組件,承擔著系統解耦、異步處理、流量削峰等重要職責。RabbitMQ作為一款成熟的消息隊列中間件,以其高可用性、高可靠性和豐富的特性,成為眾多企業的首選方案。本文將從運維工程師的角度,詳細闡述RabbitMQ從單機部署到集群搭建的完
進程間通信的消息隊列介紹
評論