版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
5.1Linux下進程間通信概述
Linux下的進程間通信方式主要有:(1)管道(pipe)管道分為無名管道和有名管道,無名管道只能用于具有親緣關(guān)系進程間的通信,允許一個進程和另一個與它有共同祖先的進程之間進行通信,而有名管道除具有無名管道具有的功能外,還能用于無親屬關(guān)系的進程間的通信。
(2)信號(signal)信號是比較復(fù)雜的通信方式,用于通知接受進程有某種事件發(fā)生,除了用于進程間通信外,進程還可以發(fā)送信號給進程本身。Linux除了支持Unix早期信號語義函數(shù)signal外,還支持語義符合Posix.1標準的信號函數(shù)sigaction。
(3)消息隊列消息隊列是消息的鏈接表,包括Posix消息隊列systemV消息隊列。它克服了信號承載信息量少,管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點,使具有寫權(quán)限的進程可以向隊列中添加消息,具有讀權(quán)限的進程可以讀取隊列中的消息。
(4)共享內(nèi)存共享內(nèi)存是最有用的進程間通信方式,它使得多個進程可以訪問同一塊內(nèi)存空間。它往往需要與其它通信機制結(jié)合,如與信號量結(jié)合使用可實現(xiàn)進程間的同步與互斥。
(5)內(nèi)存映射(mappedmemory)內(nèi)存映射允許任何多個進程間通信,每一個使用該機制的進程通過把一個共享的文件映射到自己的進程地址空間來實現(xiàn)它。
(6)信號量(semaphore)主要作為進程間以及同一進程不同線程之間的同步手段。
(7)套接字(socket)應(yīng)用更為廣泛的進程間通信機制,可用于不同機器之間的進程間通信。所有提供了TCP/IP協(xié)議棧的操作系統(tǒng)幾乎都提供了套接字,而所有這樣操作系統(tǒng),對套接字的編程方法幾乎是完全一樣的。
5.2管道通信5.2.1管道概述管道是Linux支持的最初UnixIPC形式之一,具有以下特點:(1)管道是半雙工的通信模式,數(shù)據(jù)只能向一個方向流動。(2)只能用于具有親緣關(guān)系的進程間的通信,即父子進程或者兄弟進程之間。(3)管道對于管道兩端的進程而言,就是一個文件,但它不是普通的文件,它不屬于某種文件系統(tǒng),而是單獨構(gòu)成一種文件系統(tǒng),并且只存在與內(nèi)存中。
5.2.2管道創(chuàng)建與關(guān)閉創(chuàng)建管道可以通過調(diào)用pipe函數(shù)來實現(xiàn)。pipe函數(shù)的語法要點如下:頭文件:#include<unistd.h>函數(shù)原型:intpipe(intfd[2])
pipe函數(shù)通過傳入兩個文件描述符來創(chuàng)建管道,調(diào)用成功時返回0,否則返回-1。
5.2.3管道讀寫一般文件的I/O函數(shù)都可以用于管道,如close、read、write等等。
5.2.4標準流管道系統(tǒng)提供了一個popen函數(shù)來完成標準流管道的一系列創(chuàng)建過程;
popen函數(shù)的使用可大大減少代碼的編寫量,但是創(chuàng)建管道時缺少靈活性,該函數(shù)只能支持標準的I/O函數(shù),不能使用read、write這類不帶緩沖的I/O函數(shù)。關(guān)閉標準流管道使用pclose函數(shù)來完成,該函數(shù)關(guān)閉標準I/O流,并等待命令執(zhí)行結(jié)束。
5.2.5FIFO命名管道(namedpipes),因為這種管道的操作方式基于“先進先出”原理,也稱為FIFO(FirstInFirstOut)在程序中調(diào)用mkfifo函數(shù)創(chuàng)建FIFO管道,mkfifo函數(shù)調(diào)用的原型為:
#include<sys/types.h>#include<sys/state.h>intmkfifo(constchar*filename,mode_tmode);
5.3信號機制5.3.1信號概述1.信號及信號來源信號是在軟件層次上對中斷機制的一種模擬,在原理上,一個進程收到一個信號與處理器收到一個中斷請求可以說是一樣的。信號是異步的。信號事件的發(fā)生有兩個來源:硬件來源(比如我們按下了鍵盤或者其它硬件故障);軟件來源,最常用發(fā)送信號的系統(tǒng)函數(shù)是kill、raise、alarm、setitimer和sigqueue函數(shù),軟件來源還包括一些非法運算等操作。
2.信號的種類可以從兩個不同的分類角度對信號進行分類:(1)可靠性方面:可靠信號與不可靠信號;(2)與時間的關(guān)系上:實時信號與非實時信號。
3.進程對信號的響應(yīng)進程對信號的響應(yīng)有以下三種方式:(1)忽略信號,即對信號不做任何處理,但是有兩個信號不能忽略,即SIGKILL和SIGSTOP。(2)捕捉信號,定義信號處理函數(shù),當信號發(fā)生時,執(zhí)行相應(yīng)的處理函數(shù)。(3)執(zhí)行缺省操作,Linux對每種信號都規(guī)定了默認操作。
5.3.2信號的發(fā)送1.kill()和raise()kill函數(shù)和kill系統(tǒng)命令一樣,可以發(fā)送信號給進程或者進程組。它不僅可以終止進程,還可以向進程發(fā)送其他信號。與kill函數(shù)不同,raise函數(shù)允許向其自身發(fā)送信號。kill函數(shù)相關(guān)語法要點:頭文件:#include<sys/types.h>和#include<signal.h>函數(shù)原型:intkill(pid_tpid,intsigno)
raise函數(shù)相關(guān)語法要點:頭文件:#include<sys/types.h>和#include<signal.h>函數(shù)原型:intraise(intsigno)
2.a(chǎn)larm()和pause()alarm函數(shù)可以在進程中設(shè)置一個定時器,當定時器指定的時間到達時,它就向進程發(fā)送SIGALARM信號。一個進程只有一個鬧鐘時間,如果在調(diào)用alarm之前已經(jīng)設(shè)置過鬧鐘時間,則新設(shè)置的鬧鐘時間會替代以前設(shè)置的鬧鐘時間。alarm函數(shù)相關(guān)語法要點:頭文件:#include<unistd.h>函數(shù)原型:unsignedintalarm(unsignedintseconds)
pause函數(shù)是用于將調(diào)用進程掛起直至捕捉到信號為止,通??捎糜谂袛嘈盘柺欠褚训?。pause函數(shù)相關(guān)語法要點:頭文件:#include<unistd.h>函數(shù)原型:intpause(void)函數(shù)返回值:返回值為-1,并把error值設(shè)為EINTR。
3.sigqueue()sigqueue函數(shù)是比較新的發(fā)送信號系統(tǒng)調(diào)用,主要是針對實時信號提出的(當然也支持前32種),支持信號帶有參數(shù),與函數(shù)sigaction()配合使用。sigqueue函數(shù)相關(guān)語法要點:頭文件:#include<sys/types.h>和#include<signal.h>函數(shù)原型:intsigqueue(pid_tpid,intsigno,constunionsigvalval)
4.setitimer()sigqueue函數(shù)是比較新的發(fā)送信號系統(tǒng)調(diào)用,主要是針對實時信號提出的(當然也支持前32種),支持信號帶有參數(shù),與函數(shù)sigaction()配合使用。sigqueue函數(shù)相關(guān)語法要點:頭文件:#include<sys/time.h>函數(shù)原型:intsetitimer(intwhich,conststructitimerval*value,structitimerval*ovalue))
5.3.3信號的處理Linux主要有兩個函數(shù)實現(xiàn)信號的處理:signal()、sigaction()。1.signal函數(shù)signal函數(shù)相關(guān)語法要點:頭文件:#include<signal.h>函數(shù)原型:void(*signal(intsignum,void(*handler)(int)))(int)
2.信號集函數(shù)組信號集被定義為一種數(shù)據(jù)類型:typedefstruct{unsignedlongsig[_NSIG_WORDS];
}sigset_t
信號集用來描述信號的集合,Linux所支持的所有信號可以全部或部分的出現(xiàn)在信號集中,主要與信號阻塞相關(guān)函數(shù)配合使用。
5.4共享內(nèi)存5.4.1共享內(nèi)存概述SystemV進程間通信(IPC)包括3種機制:消息隊列、信號量、共享內(nèi)存。SystemV共享內(nèi)存把共享數(shù)據(jù)放在共享內(nèi)存區(qū)域,任何想要訪問該數(shù)據(jù)的進程通過共享該內(nèi)存區(qū)域來獲得訪問權(quán)。SystemV共享內(nèi)存通過shmget獲得或創(chuàng)建一個IPC共享內(nèi)存區(qū)域,并返回相應(yīng)的標識符。
5.4.2共享內(nèi)存的實現(xiàn)1.接口函數(shù)
SystemV為共享內(nèi)存主要定義了fork()、shmget()、shmat()、shmdt()和shmctl()幾個API接口函數(shù)fork函數(shù)用于生成一個鍵值:key_tkey;shmget函數(shù)用于創(chuàng)建(或者獲?。┮粋€由key鍵值指定的共享內(nèi)存對象;
shmat函數(shù)用于建立調(diào)用進程與由標識符shmid指定的共享內(nèi)存對象之間的連接,返回被映射的段地址;shmdt函數(shù)用于斷開調(diào)用進程與共享內(nèi)存對象之間的連接;shmctl函數(shù)用于對已創(chuàng)建的共享內(nèi)存對象進行查詢、設(shè)值、刪除等操作.2.實例
5.5消息隊列5.5.1消息隊列概述消息隊列就是一個消息的鏈表。可以把消息看作一個記錄,具有特定的格式以及特定的優(yōu)先級。用戶可以從消息隊列中添加消息、讀取消息。
下圖說明了內(nèi)核與消息隊列是怎樣建立起聯(lián)系的。其中:structipc_idsmsg_ids是內(nèi)核中記錄消息隊列的全局數(shù)據(jù)結(jié)構(gòu);structmsg_queue是每個消息隊列的隊列頭。
5.5.2消息隊列的實現(xiàn)1.接口函數(shù)
SystemV為消息隊列的實現(xiàn)主要定義了msgget()、msgsnd()、msgrcv()和msgctl()幾個API接口函數(shù)msgget函數(shù)用于創(chuàng)建或打開消息隊列msgsnd函數(shù)用于發(fā)送消息msgrcv函數(shù)用于讀取消息msgctl函數(shù)用于對由msqid標識的消息隊列執(zhí)行cmd操作
2.實例實例首先使用msgget函數(shù)創(chuàng)建一個新的消息隊列,接著使用msgsnd函數(shù)添加一個消息到消息隊列,然后使用msgrcv函數(shù)從消息隊列中讀取消息,最后使用msgctl函數(shù)刪除該消息隊列。
5.6信號量信號量用于保護系統(tǒng)中關(guān)鍵的代碼或者數(shù)據(jù)結(jié)構(gòu)。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年青海衛(wèi)生職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試備考題庫含詳細答案解析
- 2026新疆博爾塔拉州博樂市自來水有限責任公司招聘3人參考考試題庫及答案解析
- 2026年河北外國語學(xué)院單招綜合素質(zhì)考試備考試題含詳細答案解析
- 2026年廣西工業(yè)職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試參考題庫含詳細答案解析
- 2026年江蘇醫(yī)藥職業(yè)學(xué)院單招職業(yè)技能考試備考題庫含詳細答案解析
- 2026年麗水職業(yè)技術(shù)學(xué)院公開招聘專業(yè)技術(shù)人員19人考試重點題庫及答案解析
- 2026青海黃南州州直部分單位公益性崗位招聘17人參考考試試題及答案解析
- 2026河北承德醫(yī)學(xué)院選聘25人備考考試題庫及答案解析
- 2026年南昌健康職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試模擬試題含詳細答案解析
- 2026年云南文化藝術(shù)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試模擬試題及答案詳細解析
- 文化IP授權(quán)使用框架協(xié)議
- 2024年廣西壯族自治區(qū)公開遴選公務(wù)員筆試試題及答案解析(綜合類)
- 湖北煙草專賣局招聘考試真題2025
- 人教部編五年級語文下冊古詩三首《四時田園雜興(其三十一)》示范公開課教學(xué)課件
- AI領(lǐng)域求職者必看美的工廠AI面試實戰(zhàn)經(jīng)驗分享
- 4.2《揚州慢》課件2025-2026學(xué)年統(tǒng)編版高中語文選擇性必修下冊
- 鄉(xiāng)鎮(zhèn)應(yīng)急管理培訓(xùn)
- DB63∕T 2215-2023 干法直投改性劑瀝青路面施工技術(shù)規(guī)范
- 捻線工三級安全教育(公司級)考核試卷及答案
- 學(xué)校智慧校園建設(shè)協(xié)議
- 上海市中考物理基礎(chǔ)選擇百題練習(xí)
評論
0/150
提交評論