消息隊列是一種非常常見的進程間通信方式。
使用消息隊列也很簡單。首先是創建消息隊列,消息隊列由內核來維護,創建成功后,用命令ipcs可以看到。一個進程往消息隊列中寫入數據,另一個進程從消息隊列中讀取數據。乍一看,跟管道的讀寫操作一樣。
但是它比管道更加實用,發送數據的時候,可以指定數據的類型。也就是說,發出去的數據被分成了兩份,一份是具體的數據,另一份用來表示類型。這樣即使有多個進程來讀取數據,只要各自指定了類型,數據就不會亂。
而管道卻沒有這么靈活,如果有多個進程讀取管道數據,先讀的進程就能獲得全部數據。
消息隊列主要涉及這么幾個函數。創建消息隊列使用msgget,第一個參數是key,用于區分內核中不同的消息隊列,第二個參數表示創建消息隊列且消息隊列不存在。
發送數據使用msgsnd,參數分別是消息隊列標識、發送的數據、數據的長度以及標志位。
接收數據使用msgrecv,多了一個參數表示數據的類型。
運行程序,一個進程寫入數據,另一個進程就能把數據讀取出來。
這就是進程間通信的消息隊列,他比管道和信號更加實用,如果有多個進程需要傳輸數據,用消息隊列更加合適。
-
消息隊列
+關注
關注
0文章
33瀏覽量
2984
原文標題:進程間通信之消息隊列
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論