好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Linux消息隊列實現進程間通信實例詳解

Linux消息隊列實現進程間通信實例詳解

熱門標簽:地圖標注人員分布 400的電話一般從哪里辦理 益陽400電話申請辦理流程 梧州防封電銷卡 昆明電銷機器人價格 上海機器人外呼系統哪家好 春運地圖標注app 江西全自動外呼系統報價 怎么用百度地圖標注坐標

Linux消息隊列實現進程間通信實例詳解

一、什么是消息隊列

消息隊列提供了一種從一個進程向另一個進程發送一個數據塊的方法。  每個數據塊都被認為含有一個類型,接收進程可以獨立地接收含有不同類型的數據結構。我們可以通過發送消息來避免命名管道的同步和阻塞問題。但是消息隊列與命名管道一樣,每個數據塊都有一個最大長度的限制

Linux用宏MSGMAX和MSGMNB來限制一條消息的最大長度和一個隊列的最大長度。

二、在Linux中使用消息隊列

Linux提供了一系列消息隊列的函數接口來讓我們方便地使用它來實現進程間的通信。它的用法與其他兩個System V PIC機制,即信號量和共享內存相似。

進程間通信(IPC):進程間通信的本質就是通過讓不同的進程看到一份公共的資源來實現通信。

常用的進程間通信的方式有兩種:通過管道和systemv標準,今天我們來介紹systemv標準中的一種:消息隊列

消息隊列:消息隊列提供了一種從一個進程向另一個進程發送一個數據塊的方法,每個數據塊都認為是有一個類型,接受者進程接收的數據塊可以有不同的類型值。我們可以通過發送消息來避免命名管道的同步和阻塞問題。

特點:

(1)消息隊列可認為是全局的一個鏈表,由消息隊列標識符進行標識。
(2)消息隊列允許一個或多個進程寫入或讀取消息
(3)消息隊列的聲明周期隨內核
(4)消息隊列可以實現雙向通信

創建一個消息隊列:msget()

第一個參數:每一個消息隊列都有唯一的key值,可以由ftok()產生

第二個參數:一般由兩個選項IPC_CREAT和IPC_EXCL,單獨使用ipc_creat時,如果消息隊列不存在則創建一個,如果存在則打開 IPC_EXCL 如果同時使用,如果消息隊列不存在則創建之,如果存在則出錯返回。當單獨使用IPC_EXCL時,沒有意義。

ftok:

參數可由用戶指定。

下面用代碼實現消息隊列的創建:

在創建一個消息隊列(其他ipc相同)時,需要先通過文件路徑名和項目ID獲取一個鍵值,然后通過此鍵值由內核生成標識符,在以后可通過此標識符來使用此消息隊列。

為什么要有key值和標識符兩個值呢?

描述符是對于用戶操作而言的,讓用戶感覺操作和對文件的操作相同,key是對于系統內部說的。

我們使用ftok來創建key值,具體可以man一下fotk函數,大概是這樣的:按給定的路徑名取得其stat結構,從該結構中取出部分st_dev和st_ino字段,然后再與項目id組合起來,如果兩個路徑名引用兩個不同的文件,那么,對這兩個路徑名調用ftok通常返回不同的key值,但是,因為i節點號和key通常都存放在長整型中,于是創建key時可能會丟失信息,這意味著,如果使用同一項目id,那么對于不同文件的兩個路徑名可能產生相同的key值。而標識符是唯一確定的,可以用來區別于其他ipc的。

刪除消息隊列:msgctl()

代碼實現:

發送消息:msgsnd()

接收消息:magrcv(),這兩個函數實現進程間的雙向通信
 

參數:msqid-消息隊列標識碼

msgp-指向消息緩沖區的指針,此位置是用來暫時存儲發送和接收的消息,是一個用戶可定義的通用結構。
msgtyp-從消息隊列內讀取的消息形態。如果值為0,則表示消息隊列中,所有消息被讀取。
msgsz:消息的大小

返回值:成功返回0,失敗則返回-1.

那么如何查看系統中正在運行的消息隊列呢?

介紹兩個命令:ipcs -q 查看消息隊列

ipcrm -q msgid 刪除此消息隊列

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
您可能感興趣的文章:
  • Linux進程間通信——使用流套接字
  • 詳解Linux進程間通信——使用信號量
  • 關于進程間通信的Linux小程序
  • PHP下操作Linux消息隊列完成進程間通信的方法
  • 淺談Linux進程間通信方式及優缺點

標簽:河南 懷化 新疆 北京 亳州 惠州 九江 贛州

巨人網絡通訊聲明:本文標題《Linux消息隊列實現進程間通信實例詳解》,本文關鍵詞  Linux,消息,隊列,實現,進程,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Linux消息隊列實現進程間通信實例詳解》相關的同類信息!
  • 本頁收集關于Linux消息隊列實現進程間通信實例詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: yw193.c国产在线观看| asian亚洲美女pics| 久久久久青草| 美女啪啪网| 宅男看片午夜大片啪啪| 黑莲花攻略手册.| www成人| 亚洲自拍另类欧美综合| 直男体育生打??GAY2022| 秋霞三级完整版在线观看 | 欧美在线免费看| 免费?无码?国产免费软件| 美女扒开腿秘籍破解| 老司机精品视频在线播放 | 色88888久久久久久影院按摩| 玥玥调教vk| 看看日日麻批40分钟免费视频| 美国美女一级毛片免费全| 5566中文字幕一区二区电影 | 娇妻边打电话边被躁BD在| 日本我和子的乱视频| 欧美在线完整高清观看| 三个老头一起吃波多野结衣| 精品国产一区二区三区蜜奴| 性欧美婬妇ⅹXXX视频| 娇妻的yin欲生活| 美女图片| 久久国产精品一区| 91亚洲精品午夜福利在线含羞草 | 男同桌把中指伸进我的下面| 婷婷色国产偷v国产偷v| 花房姑娘电影观看| 东北老女人乱子伦| 黄频在线| 亚洲色综合色少妇久久草草| 侵犯高傲女教师在线观看| 嗯…不要嗯嗯| 菲律宾妞性xxxx| 亚洲一区综合| 在线综合+亚洲+欧美中文字幕| xp123免费看片|