《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 基于linux平臺的進程通信技術簡介
基于linux平臺的進程通信技術簡介
華清遠見
王姍姍
摘要: 基于linux平臺的進程通信技術簡介,linux下的進程通信手段基本上是從Unix平臺上的進程通信手段繼承而來的。而對Unix發展做出重大貢獻的兩大主力AT&T的貝爾實驗室及BSD(加州大學伯克利分校的伯克利軟件發布中心)在進程間通信方面的側重點有所不同
Abstract:
Key words :

linux下的進程通信手段基本上是從Unix平臺上的進程通信手段繼承而來的。而對Unix發展做出重大貢獻的兩大主力AT&T的貝爾實驗室及BSD(加州大學伯克利分校的伯克利軟件發布中心)在進程間通信方面的側重點有所不同。前者對Unix早期的進程間通信手段進行了系統的改進和擴充,形成了“system V IPC”,通信進程局限在單個計算機內;后者則跳過了該限制,形成了基于套接口(socket)的進程間通信機制。Linux則把兩者繼承了下來,如圖示:

 

其中,最初Unix IPC包括:管道、FIFO、信號;System V IPC包括:System V消息隊列、System V信號燈、System V共享內存區;Posix IPC包括:

Posix消息隊列、Posix信號燈、Posix共享內存區。有兩點需要簡單說明一下:

1)由于Unix版本的多樣性,電子電氣工程協會(IEEE)開發了一個獨立的Unix標準,這個新的ANSI Unix標準被稱為計算肪車目梢浦殘圓僮饗低辰緱媯≒SOIX)?,F有大部分Unix和流行版本都是遵循POSIX標準的,而Linux從一開始就遵循POSIX標準;

2)BSD并不是沒有涉足單機內的進程間通信(socket本身就可以用于單機內的進程間通信)。事實上,很多Unix版本的單機IPC留有BSD的痕跡,如4.4BSD支持的匿名內存映射、4.3+BSD對可靠信號語義的實現等等。

linux下進程間通信的幾種主要手段簡介:


1、管道

管道是進程間通信中最古老的方式,它包括無名管道和有名管道兩種,前者可用于具有親緣關系進程間的通信,即可用于父進程和子進程間的通信,后者額克服了管道沒有名字的限制,因此,除具有前者所具有的功能外,它還允許無親緣關系進程間的通信,即可用于運行于同一臺機器上的任意兩個進程間的通信。

無名管道由pipe()函數創建:

#include

int pipe(int filedis[2]);

參數filedis返回兩個文件描述符:filedes[0]為讀而打開,filedes[1]為寫而打開。filedes[1]的輸出是filedes[0]的輸入。

在Linux系統下,有名管道可由兩種方式創建:命令行方式mknod系統調用和函數mkfifo。下面的兩種途徑都在當前目錄下生成了一個名為myfifo的有名管道:

方式一:mkfifo("myfifo","rw");

方式二:mknod myfifo p

生成了有名管道后,就可以使用一般的文件I/O函數如open、close、read、write等來對它進行操作。


2、消息隊列

消息隊列是消息的鏈接表,包括Posix消息隊列system

V消息隊列。消息隊列用于運行于同一臺機器上的進程間通信,它和管道很相似,有足夠權限的進程可以向隊列中添加消息,被賦予讀權限的進程則可以讀走隊列中的消息。消息隊列克服了信號承載信息量少,管道只能承載無格式字節流以及緩沖區大小受限等缺點。

我們可以用流管道或者套接口的方式來取代它。


3、共享內存

共享內存是運行在同一臺機器上的進程間通信最快的方式,因為數據不需要在不同的進程間復制。通常由一個進程創建一塊共享內存區,其余進程對這塊內存區進行讀寫。共享內存往往與其它通信機制,如信號量結合使用,來達到進程間的同步及互斥。

首先要用的函數是shmget,它獲得一個共享存儲標識符。

#include

#include

#include

int shmget(key_t key, int size, int flag);

這個函數有點類似大家熟悉的malloc函數,系統按照請求分配size大小的內存用作共享內存。Linux系統內核中每個IPC結構都有的一個非負整數的標識符,這樣對一個消息隊列發送消息時只要引用標識符就可以了。這個標識符是內核由IPC結構的關鍵字得到的,這個關鍵字,就是上面第一個函數的key。數據類型key_t是在頭文件sys/types.h中定義的,它是一個長整形的數據。在我們后面的章節中,還會碰到這個關鍵字。

當共享內存創建后,其余進程可以調用shmat()將其連接到自身的地址空間中。

void *shmat(int shmid, void *addr, int flag);

shmid為shmget函數返回的共享存儲標識符,addr和flag參數決定了以什么方式來確定連接的地址,函數的返回值即是該進程數據段所連接的實際地址,進程可以對此進程進行讀寫操作。

使用共享存儲來實現進程間通信的注意點是對數據存取的同步,必須確保當一個進程去讀取數據時,它所想要的數據已經寫好了。通常,信號量被要來實現對共享存儲數據存取的同步,另外,可以通過使用shmctl函數設置共享存儲內存的某些標志位如SHM_LOCK、SHM_UNLOCK等來實現。4、信號量

 

信號量又稱為信號燈,它是用來協調不同進程間的數據對象的,而最主要的應用是前一節的共享內存方式的進程間通信。本質上,信號量是一個計數器,它用來記錄對某個資源(如共享內存)的存取狀況。一般說來,為了獲得共享資源,進程需要執行下列操作:

(1) 測試控制該資源的信號量。

(2) 若此信號量的值為正,則允許進行使用該資源。進程將進號量減1。

(3) 若此信號量為0,則該資源目前不可用,進程進入睡眠狀態,直至信號量值大于0,進程被喚醒,轉入步驟(1)。

(4) 當進程不再使用一個信號量控制的資源時,信號量值加1。如果此時有進程正在睡眠等待此信號量,則喚醒此進程。

維護信號量狀態的是Linux內核操作系統而不是用戶進程。我們可以從頭文件/usr/src/linux/include/linux/sem.h中看到內核用來維護信號量狀態的各個結構的定義。信號量是一個數據集合,用戶可以單獨使用這一集合的每個元素。要調用的第一個函數是semget,用以獲得一個信號量ID。

#include

#include

#include

int semget(key_t key, int nsems, int flag);

key是前面講過的IPC結構的關鍵字,它將來決定是創建新的信號量集合,還是引用一個現有的信號量集合。nsems是該集合中的信號量數。如果是創建新集合(一般在服務器中),則必須指定nsems;如果是引用一個現有的信號量集合(一般在客戶機中)則將nsems指定為0。

semctl函數用來對信號量進行操作。

int semctl(int semid, int semnum, int cmd, union semun arg);

不同的操作是通過cmd參數來實現的,在頭文件sem.h中定義了7種不同的操作,實際編程時可以參照使用。

semop函數自動執行信號量集合上的操作數組。

int semop(int semid, struct sembuf semoparray[], size_t nops);

semoparray是一個指針,它指向一個信號量操作數組。nops規定該數組中操作的數量。

下面,我們看一個具體的例子,它創建一個特定的IPC結構的關鍵字和一個信號量,建立此信號量的索引,修改索引指向的信號量的值,最后我們清除信號量。


5、套接口

套接口(socket)編程是實現Linux系統和其他大多數操作系統中進程間通信的主要方式之一。我們熟知的WWW服務、FTP服務、TELNET服務等都是基于套接口編程來實現的。除了在異地的計算機進程間以外,套接口同樣適用于本地同一臺計算機內部的進程間通信。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美freesex交免费视频| 国产精品成人免费| 亚洲日本精品国产第一区| 国产日韩欧美精品| 亚洲私人黄色宅男| 亚洲午夜一区二区三区| 在线视频一区二区| 国产色综合天天综合网| 国产乱理伦片在线观看夜一区| 亚洲乱码国产乱码精品精可以看| 欧美日韩一区二区三区四区五区| 亚洲免费观看| 亚洲午夜激情网页| 午夜精品久久久久久久99樱桃| 亚洲影视中文字幕| 国产一区久久久| 欧美在线三区| 亚洲国产天堂久久综合| 韩国av一区二区三区四区| 亚洲国产天堂久久综合网| 欧美.日韩.国产.一区.二区| 欧美精选午夜久久久乱码6080| 亚洲精一区二区三区| 国产精品丝袜白浆摸在线| 亚洲精品欧美精品| 国产精品视区| 久久久久久网址| 一区二区国产精品| 欧美亚洲免费| 欧美另类69精品久久久久9999| 亚洲国产视频一区二区| 国产日韩精品入口| 久久久精品视频成人| 亚洲综合欧美日韩| 激情综合网址| 牛牛精品成人免费视频| 蜜桃av久久久亚洲精品| 欧美日韩mv| 亚洲免费视频成人| 亚洲激情视频| 国产精品久久久久久久午夜片| 在线视频欧美日韩| 一本色道久久综合亚洲精品不卡| 亚洲女与黑人做爰| 久久久精品欧美丰满| 亚洲精品麻豆| 亚洲电影免费观看高清完整版在线| 国产精品久久久久影院色老大| 欧美日韩亚洲不卡| 亚洲精品欧美极品| 在线中文字幕不卡| 亚洲永久在线| 国产精品成人观看视频国产奇米| 性色av一区二区怡红| 裸体一区二区三区| 亚洲人成网站影音先锋播放| 亚洲成色999久久网站| 欧美国产日本高清在线| 国产日韩视频| 国产精品日韩欧美一区二区| 狠狠色综合一区二区| 亚洲香蕉网站| 久久先锋影音| 欧美吻胸吃奶大尺度电影| 亚洲国产乱码最新视频| 香蕉久久夜色精品国产使用方法| 欧美日韩国产色综合一二三四| 国产精品热久久久久夜色精品三区| 欧美日韩国产在线播放网站| 亚洲午夜国产成人av电影男同| 日韩亚洲欧美成人| 中日韩午夜理伦电影免费| 亚洲淫性视频| 欧美日韩福利在线观看| 韩国三级电影一区二区| 亚洲美女毛片| 99国产精品久久久久久久| 国产精品揄拍一区二区| 91久久精品国产91久久性色tv| 欧美高清视频在线观看| 一色屋精品视频在线看| 国产精品免费一区二区三区在线观看| 亚洲精品日韩精品| 欧美视频日韩| 亚洲高清视频一区二区| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美国产激情二区三区| 国产精品亚洲片夜色在线| 亚洲国产高清自拍| 国产精品五区| 国产精品一区二区三区四区五区| 国产一区二区福利| 国产亚洲aⅴaaaaaa毛片| 久久人人爽国产| 欧美三级中文字幕在线观看| 亚洲视频欧美视频| 欧美一区二视频在线免费观看| 亚洲女与黑人做爰| 亚洲精品一区二区三区蜜桃久| 欧美成人在线影院| 欧美三级网址| 久久成人一区二区| 欧美成人官网二区| 一本久道久久久| 欧美天天视频| 亚洲免费在线| 一本一本大道香蕉久在线精品| 久久久之久亚州精品露出| 亚洲一区国产一区| 亚洲欧洲在线免费| 免费在线观看一区二区| 国产精品露脸自拍| 一区二区三区精品| 国产亚洲一二三区| 欧美一区二区三区免费大片| 在线成人www免费观看视频| 欧美午夜精品久久久久久浪潮| 国产精品日韩欧美综合| 欧美日韩在线影院| 最新亚洲电影| 久久精品国产999大香线蕉| 欧美三级中文字幕在线观看| 久久黄色小说| 亚洲欧美综合国产精品一区| 亚洲免费在线视频一区 二区| 国产综合在线视频| 欧美在线一区二区| 久久婷婷国产综合精品青草| 亚洲天天影视| 免费不卡中文字幕视频| 性做久久久久久免费观看欧美| 99这里有精品| 久久久91精品国产一区二区精品| 欧美日韩在线视频一区二区| 欧美午夜片在线免费观看| 美女999久久久精品视频| 狠狠色香婷婷久久亚洲精品| 亚洲精品免费在线| 亚洲一二区在线| 国产精品免费一区二区三区在线观看| 精品999久久久| 亚洲国产成人av在线| 欧美日韩福利在线观看| 99在线观看免费视频精品观看| 亚洲视频中文| 亚洲电影视频在线| 亚洲国产精品欧美一二99| 国产欧美一区二区三区国产幕精品| 免费在线观看日韩欧美| 午夜精品成人在线视频| 亚洲黄一区二区三区| 亚洲精品国精品久久99热| 99视频在线精品国自产拍免费观看| 国产视频一区二区在线观看| 欧美午夜一区二区三区免费大片| 欧美在线一二三四区| 欧美精品一区二区三区久久久竹菊| 国产欧美日韩91| 亚洲精品中文字幕女同| 性伦欧美刺激片在线观看| 久久久九九九九| 国产亚洲美州欧州综合国| 一区国产精品| 国产精品免费网站| 免费看亚洲片| 亚洲你懂的在线视频| 一本色道久久综合亚洲精品不| 欧美激情2020午夜免费观看| 欧美有码视频| 国产精品一二三视频| 亚洲高清久久久| 亚洲一区二区三区激情| 中日韩美女免费视频网站在线观看| 亚洲第一精品久久忘忧草社区| 亚洲激情婷婷| 亚洲午夜精品视频| 国产精品国产三级国产aⅴ浪潮| 亚洲欧洲日产国产网站| 久久久精品一品道一区| 国产日韩精品在线观看| 国产一区二区三区在线免费观看| 欧美人妖另类| 一级日韩一区在线观看| 欧美亚洲一区三区| 欧美激情亚洲综合一区| 国产亚洲激情视频在线| 欧美久久99| 国产一区二区高清| 欧美一级视频免费在线观看| 久久精品道一区二区三区| 午夜精品久久一牛影视| 亚洲国产欧美一区| 亚洲已满18点击进入久久| 麻豆精品91| 久久精品最新地址| 欧美日韩视频专区在线播放| 激情六月综合| 欧美日本精品一区二区三区| 国内偷自视频区视频综合| 狠狠色伊人亚洲综合网站色| 狂野欧美激情性xxxx欧美| 久久综合九九| 午夜精品国产精品大乳美女| 99在线精品观看| 国产伦精品一区二区三区高清| 欧美高清在线视频观看不卡| 久久久久国产一区二区三区四区| 亚洲人成亚洲人成在线观看图片| 日韩视频专区| 亚洲第一色中文字幕| 亚洲一区中文| 欧美日本一区二区三区| 国产精品久久久久久av福利软件| 亚洲人体影院| 亚洲国产裸拍裸体视频在线观看乱了中文| 中文亚洲免费| 亚洲国产精品黑人久久久| 国产精品视频1区| 精久久久久久| 亚洲视频一区二区在线观看| 欧美激情视频免费观看| 欧美成年人视频网站| 韩日欧美一区二区三区| 国产精品久久久久久久久| 亚洲精品一区二| 中日韩美女免费视频网站在线观看| 久久久久九九九| 亚洲日本中文字幕免费在线不卡| 欧美在线播放一区| 亚洲天堂免费在线观看视频| 国产精品久久久久久久久搜平片| 亚洲一区二区三区在线看| 国产精品porn| 亚洲综合第一| 国产精品主播| 欧美一级视频免费在线观看| 国产日韩av一区二区| 久久精品在线播放| 欧美激情一区二区三区| 伊人久久亚洲影院| 欧美亚洲三区| 欧美在线播放高清精品| 亚洲欧洲另类| 欧美亚州一区二区三区| 国产伦精品一区二区三区照片91| 亚洲国产精品va在线看黑人动漫| 国产精品成人一区二区艾草| 欧美a一区二区| 在线视频亚洲一区| 国产精品久久久久77777| 激情久久五月天| 国产精品美女www爽爽爽视频| 91久久在线视频| 亚洲欧美日韩一区二区在线| 欧美亚洲三区| 亚洲人午夜精品免费| 久久久久久久国产| 亚洲毛片在线观看.| 99热免费精品在线观看| 欧美精品videossex性护士| 国产精品一区一区| 久久精品欧洲| 亚洲精品国产品国语在线app| 91久久精品日日躁夜夜躁国产| 亚洲欧美视频在线观看视频| 国产视频丨精品|在线观看| 亚洲欧洲精品一区二区| 亚洲精品免费一二三区| 国产精品亚洲片夜色在线| 一区二区三区在线视频播放| 免费在线国产精品| 欧美成人精品在线视频| 久久久久国产精品www| 亚洲国产精品传媒在线观看| 欧美成人免费小视频| 亚洲一区二区三区中文字幕| 欧美激情精品久久久久久蜜臀| 久久免费99精品久久久久久| 精品成人乱色一区二区| 亚洲区免费影片| 久久色在线观看| 亚洲国产三级在线| 欧美日韩一区二区三区高清| 99国产精品私拍| 国产九九精品视频| 国产精品久久久久aaaa九色| 黄色成人片子| 国产精品成人观看视频免费| 在线观看一区视频| 亚洲丶国产丶欧美一区二区三区| 久久一区二区三区四区五区| 久久婷婷一区| 免费中文日韩| 欧美日韩在线精品一区二区三区| 欧美成人免费全部观看天天性色| 国产精品久久777777毛茸茸| 欧美日韩一区二区免费在线观看| 欧美连裤袜在线视频| 亚洲精品久久久久中文字幕欢迎你| 久久九九精品99国产精品| 1000部国产精品成人观看| 亚洲免费观看在线观看| 99视频超级精品| 欧美视频在线一区二区三区| 国产精品日韩欧美大师| 欧美亚州一区二区三区| 99在线热播精品免费| 国产精品久久久久久久久婷婷| 久久9热精品视频| 亚洲欧美成人在线| 亚洲免费精彩视频| 欧美日韩精品综合在线| 欧美日韩综合在线免费观看| 亚洲电影免费观看高清完整版在线| 亚洲一区二区三| 在线播放亚洲| 欧美日韩国产综合一区二区| 亚洲一区999| 在线播放一区| 国产亚洲欧洲| 亚洲国产精品久久久久秋霞影院| 欧美日本网站| 欧美怡红院视频一区二区三区| 一区二区在线观看av| 亚洲欧美韩国| 国产精品视频导航| 欧美精品久久久久久久免费观看| 一区二区在线不卡|