最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux消息隊(duì)列實(shí)現(xiàn)進(jìn)程間通信實(shí)例詳解

 更新時(shí)間:2017年07月10日 10:26:28   作者:ChaseRaod  
這篇文章主要介紹了Linux消息隊(duì)列實(shí)現(xiàn)進(jìn)程間通信實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下

Linux消息隊(duì)列實(shí)現(xiàn)進(jìn)程間通信實(shí)例詳解

一、什么是消息隊(duì)列

消息隊(duì)列提供了一種從一個(gè)進(jìn)程向另一個(gè)進(jìn)程發(fā)送一個(gè)數(shù)據(jù)塊的方法。  每個(gè)數(shù)據(jù)塊都被認(rèn)為含有一個(gè)類型,接收進(jìn)程可以獨(dú)立地接收含有不同類型的數(shù)據(jù)結(jié)構(gòu)。我們可以通過發(fā)送消息來避免命名管道的同步和阻塞問題。但是消息隊(duì)列與命名管道一樣,每個(gè)數(shù)據(jù)塊都有一個(gè)最大長度的限制

Linux用宏MSGMAX和MSGMNB來限制一條消息的最大長度和一個(gè)隊(duì)列的最大長度。

二、在Linux中使用消息隊(duì)列

Linux提供了一系列消息隊(duì)列的函數(shù)接口來讓我們方便地使用它來實(shí)現(xiàn)進(jìn)程間的通信。它的用法與其他兩個(gè)System V PIC機(jī)制,即信號量和共享內(nèi)存相似。

進(jìn)程間通信(IPC):進(jìn)程間通信的本質(zhì)就是通過讓不同的進(jìn)程看到一份公共的資源來實(shí)現(xiàn)通信。

常用的進(jìn)程間通信的方式有兩種:通過管道和systemv標(biāo)準(zhǔn),今天我們來介紹systemv標(biāo)準(zhǔn)中的一種:消息隊(duì)列

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

特點(diǎn):

(1)消息隊(duì)列可認(rèn)為是全局的一個(gè)鏈表,由消息隊(duì)列標(biāo)識符進(jìn)行標(biāo)識。
(2)消息隊(duì)列允許一個(gè)或多個(gè)進(jìn)程寫入或讀取消息
(3)消息隊(duì)列的聲明周期隨內(nèi)核
(4)消息隊(duì)列可以實(shí)現(xiàn)雙向通信

創(chuàng)建一個(gè)消息隊(duì)列:msget()
這里寫圖片描述
第一個(gè)參數(shù):每一個(gè)消息隊(duì)列都有唯一的key值,可以由ftok()產(chǎn)生

第二個(gè)參數(shù):一般由兩個(gè)選項(xiàng)IPC_CREAT和IPC_EXCL,單獨(dú)使用ipc_creat時(shí),如果消息隊(duì)列不存在則創(chuàng)建一個(gè),如果存在則打開 IPC_EXCL 如果同時(shí)使用,如果消息隊(duì)列不存在則創(chuàng)建之,如果存在則出錯(cuò)返回。當(dāng)單獨(dú)使用IPC_EXCL時(shí),沒有意義。

ftok:
這里寫圖片描述
參數(shù)可由用戶指定。

下面用代碼實(shí)現(xiàn)消息隊(duì)列的創(chuàng)建:

在創(chuàng)建一個(gè)消息隊(duì)列(其他ipc相同)時(shí),需要先通過文件路徑名和項(xiàng)目ID獲取一個(gè)鍵值,然后通過此鍵值由內(nèi)核生成標(biāo)識符,在以后可通過此標(biāo)識符來使用此消息隊(duì)列。
這里寫圖片描述

為什么要有key值和標(biāo)識符兩個(gè)值呢?

描述符是對于用戶操作而言的,讓用戶感覺操作和對文件的操作相同,key是對于系統(tǒng)內(nèi)部說的。

我們使用ftok來創(chuàng)建key值,具體可以man一下fotk函數(shù),大概是這樣的:按給定的路徑名取得其stat結(jié)構(gòu),從該結(jié)構(gòu)中取出部分st_dev和st_ino字段,然后再與項(xiàng)目id組合起來,如果兩個(gè)路徑名引用兩個(gè)不同的文件,那么,對這兩個(gè)路徑名調(diào)用ftok通常返回不同的key值,但是,因?yàn)閕節(jié)點(diǎn)號和key通常都存放在長整型中,于是創(chuàng)建key時(shí)可能會丟失信息,這意味著,如果使用同一項(xiàng)目id,那么對于不同文件的兩個(gè)路徑名可能產(chǎn)生相同的key值。而標(biāo)識符是唯一確定的,可以用來區(qū)別于其他ipc的。

刪除消息隊(duì)列:msgctl()
這里寫圖片描述
代碼實(shí)現(xiàn):
這里寫圖片描述

發(fā)送消息:msgsnd()

接收消息:magrcv(),這兩個(gè)函數(shù)實(shí)現(xiàn)進(jìn)程間的雙向通信
這里寫圖片描述 

參數(shù):msqid-消息隊(duì)列標(biāo)識碼

msgp-指向消息緩沖區(qū)的指針,此位置是用來暫時(shí)存儲發(fā)送和接收的消息,是一個(gè)用戶可定義的通用結(jié)構(gòu)。
msgtyp-從消息隊(duì)列內(nèi)讀取的消息形態(tài)。如果值為0,則表示消息隊(duì)列中,所有消息被讀取。
msgsz:消息的大小

返回值:成功返回0,失敗則返回-1.
這里寫圖片描述

那么如何查看系統(tǒng)中正在運(yùn)行的消息隊(duì)列呢?

介紹兩個(gè)命令:ipcs -q 查看消息隊(duì)列

ipcrm -q msgid 刪除此消息隊(duì)列
這里寫圖片描述

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Shell腳本編寫Nagios插件監(jiān)控程序資源占用

    Shell腳本編寫Nagios插件監(jiān)控程序資源占用

    這篇文章主要介紹了Shell腳本編寫Nagios插件監(jiān)控程序資源占用,本文先是給出了需求和需求分析,然后給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-12-12
  • CentOS 6.3下給PHP添加mssql擴(kuò)展模塊教程

    CentOS 6.3下給PHP添加mssql擴(kuò)展模塊教程

    這篇文章主要介紹了CentOS 6.3下給PHP添加mssql擴(kuò)展模塊教程,本文使用freetds編譯安裝實(shí)現(xiàn),需要的朋友可以參考下
    2014-09-09
  • linux shell數(shù)據(jù)重定向(輸入重定向與輸出重定向)詳細(xì)分析

    linux shell數(shù)據(jù)重定向(輸入重定向與輸出重定向)詳細(xì)分析

    這篇文章主要介紹了linux shell數(shù)據(jù)重定向(輸入重定向與輸出重定向)詳細(xì)分析,需要的朋友可以參考下
    2015-10-10
  • Linux Shell腳本編程初體驗(yàn)

    Linux Shell腳本編程初體驗(yàn)

    腳本語言是與計(jì)算機(jī)交流的另外一種途徑。使用圖形化窗口界面用戶可以移動鼠標(biāo)并點(diǎn)擊各種對象,比如按鈕、列表、選框等等。但這種方式在每次用戶想要計(jì)算機(jī)/服務(wù)器完成相同任務(wù)時(shí)卻是十分不方便。要想讓所有這些事情變得簡單并且自動化,我們可以使用shell腳本
    2015-08-08
  • 淺析Linux常用文件管理命令

    淺析Linux常用文件管理命令

    這篇文章主要介紹了Linux常用文件管理命令,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-04-04
  • linux crontab 實(shí)現(xiàn)每秒執(zhí)行的實(shí)例

    linux crontab 實(shí)現(xiàn)每秒執(zhí)行的實(shí)例

    下面小編就為大家?guī)硪黄猯inux crontab 實(shí)現(xiàn)每秒執(zhí)行的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Linux 中unzip解壓時(shí)中文亂碼的解決辦法

    Linux 中unzip解壓時(shí)中文亂碼的解決辦法

    這篇文章主要介紹了Linux 中unzip解壓時(shí)中文亂碼的解決辦法的相關(guān)資料,這里提供兩種解決辦法,希望能通過本文幫助到大家,需要的朋友可以參考下
    2017-09-09
  • Shell腳本中引用、調(diào)用另一個(gè)腳本文件的2種方法

    Shell腳本中引用、調(diào)用另一個(gè)腳本文件的2種方法

    這篇文章主要介紹了Shell腳本中引用、調(diào)用另一個(gè)腳本文件的2種方法,本文介紹了兩種方法的語法,然后給出實(shí)際使用實(shí)例和一些要注意的地方,需要的朋友可以參考下
    2015-06-06
  • shell wait等待命令的具體使用

    shell wait等待命令的具體使用

    本文主要介紹了shell wait等待命令的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 使用iconv批量改變文件編碼的shell腳本

    使用iconv批量改變文件編碼的shell腳本

    在開發(fā)中,我們經(jīng)常需要對N多文件編碼進(jìn)行更改,iconv只能對單文件的進(jìn)行更改,怎么辦呢?我們寫一個(gè)shell腳本來解決這個(gè)問題
    2014-08-08

最新評論

龙井市| 沽源县| 敦煌市| 读书| 鹤壁市| 吴忠市| 吴堡县| 高雄市| 伊金霍洛旗| 安吉县| 瑞金市| 广昌县| 金湖县| 阿拉善右旗| 象山县| 盘山县| 昌江| 阿合奇县| 巴彦县| 土默特左旗| 孟连| 长宁县| 南丰县| 常熟市| 甘孜| 铜梁县| 江都市| 江达县| 孟津县| 科尔| 遵义县| 安吉县| 富川| 商河县| 新宾| 绿春县| 额济纳旗| 贵州省| 乌拉特中旗| 油尖旺区| 济宁市|