進(jìn)程間通信-1

進(jìn)程間通信-1

ID:34449937

大?。?26.95 KB

頁數(shù):47頁

時(shí)間:2019-03-06

進(jìn)程間通信-1_第1頁
進(jìn)程間通信-1_第2頁
進(jìn)程間通信-1_第3頁
進(jìn)程間通信-1_第4頁
進(jìn)程間通信-1_第5頁
資源描述:

《進(jìn)程間通信-1》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、LINUX進(jìn)程間通信程序設(shè)計(jì)-1Contents進(jìn)程間通訊概述管道通訊信號(hào)通訊共享內(nèi)存必修實(shí)驗(yàn)Contents進(jìn)程間通訊概述管道通訊信號(hào)通訊共享內(nèi)存必修實(shí)驗(yàn)?zāi)康臑槭裁催M(jìn)程間需要通信?1、數(shù)據(jù)傳輸一個(gè)進(jìn)程需要將它的數(shù)據(jù)發(fā)送給另一個(gè)進(jìn)程。2、資源共享多個(gè)進(jìn)程之間共享同樣的資源。目的3、通知事件一個(gè)進(jìn)程需要向另一個(gè)或一組進(jìn)程發(fā)送消息,通知它們發(fā)生了某種事件。4、進(jìn)程控制有些進(jìn)程希望完全控制另一個(gè)進(jìn)程的執(zhí)行(如Debug進(jìn)程),此時(shí)控制進(jìn)程希望能夠攔截另一個(gè)進(jìn)程的所有操作,并能夠及時(shí)知道它的狀態(tài)改變。發(fā)展Linux進(jìn)程間通信(IPC)由以下幾部分

2、發(fā)展而來:1、UNIX進(jìn)程間通信2、基于SystemV進(jìn)程間通信3、POSIX進(jìn)程間通信POSIXPOSIX(PortableOperatingSystemInterface)表示可移植操作系統(tǒng)接口。電氣和電子工程師協(xié)會(huì)(InstituteofElectricalandElectronicsEngineers,IEEE)最初開發(fā)POSIX標(biāo)準(zhǔn),是為了提高UNIX環(huán)境下應(yīng)用程序的可移植性。然而,POSIX并不局限于UNIX,許多其它的操作系統(tǒng),例如DECOpenVMS和MicrosoftWindows,都支持POSIX標(biāo)準(zhǔn)。SystemVS

3、ystemV,也被稱為AT&TSystemV,是Unix操作系統(tǒng)眾多版本中的一支。分類現(xiàn)在Linux使用的進(jìn)程間通信方式包括:1、管道(pipe)和有名管道(FIFO)2、信號(hào)(signal)3、消息隊(duì)列4、共享內(nèi)存5、信號(hào)量6、套接字(socket)Contents進(jìn)程間通訊概述管道通訊信號(hào)通訊共享內(nèi)存必修實(shí)驗(yàn)管道通信什么是管道?管道是單向的、先進(jìn)先出的,它把一個(gè)進(jìn)程的輸出和另一個(gè)進(jìn)程的輸入連接在一起。一個(gè)進(jìn)程(寫進(jìn)程)在管道的尾部寫入數(shù)據(jù),另一個(gè)進(jìn)程(讀進(jìn)程)從管道的頭部讀出數(shù)據(jù)。管道通信數(shù)據(jù)被一個(gè)進(jìn)程讀出后,將被從管道中刪除,其它讀

4、進(jìn)程將不能再讀到這些數(shù)據(jù)。管道提供了簡單的流控制機(jī)制,進(jìn)程試圖讀空管道時(shí),進(jìn)程將阻塞。同樣,管道已經(jīng)滿時(shí),進(jìn)程再試圖向管道寫入數(shù)據(jù),進(jìn)程將阻塞。管道創(chuàng)建管道包括無名管道和有名管道兩種,前者用于父進(jìn)程和子進(jìn)程間的通信,后者可用于運(yùn)行于同一系統(tǒng)中的任意兩個(gè)進(jìn)程間的通信。無名管道由pipe()函數(shù)創(chuàng)建:intpipe(intfiledis[2]);當(dāng)一個(gè)管道建立時(shí),它會(huì)創(chuàng)建兩個(gè)文件描述符:filedis[0]用于讀管道,filedis[1]用于寫管道。管道通信管道關(guān)閉關(guān)閉管道只需將這兩個(gè)文件描述符關(guān)閉即可,可以使用普通的close函數(shù)逐個(gè)關(guān)閉。

5、管道通信#include#include#include#includeintmain(){intpipe_fd[2];if(pipe(pipe_fd)<0){printf("pipecreateerror");return-1;}elseprintf("pipecreatesuccess");close(pipe_fd[0]);close(pipe_fd[1]);}管道讀寫管道用于不同進(jìn)程間通信。通常先創(chuàng)建一個(gè)管道,再通過fork函數(shù)創(chuàng)建一個(gè)子進(jìn)程,該子

6、進(jìn)程會(huì)繼承父進(jìn)程所創(chuàng)建的管道。注意事項(xiàng)必須在系統(tǒng)調(diào)用fork()前調(diào)用pipe(),否則子進(jìn)程將不會(huì)繼承文件描述符。實(shí)例分析與演示pipe_rw.c命名管道(FIFO)命名管道和無名管道基本相同,但也有不同點(diǎn):無名管道只能由父子進(jìn)程使用;但是通過命名管道,不相關(guān)的進(jìn)程也能交換數(shù)據(jù)。創(chuàng)建#include#includeintmkfifo(constchar*pathname,mode_tmode)vpathname:FIFO文件名vmode:屬性(見文件操作章節(jié))一旦創(chuàng)建了一個(gè)FIFO,就可

7、用open打開它,一般的文件訪問函數(shù)(close、read、write等)都可用于FIFO。操作當(dāng)打開FIFO時(shí),非阻塞標(biāo)志(O_NONBLOCK)將對(duì)以后的讀寫產(chǎn)生如下影響:1、沒有使用O_NONBLOCK:訪問要求無法滿足時(shí)進(jìn)程將阻塞。如試圖讀取空的FIFO,將導(dǎo)致進(jìn)程阻塞。2、使用O_NONBLOCK:訪問要求無法滿足時(shí)不阻塞,立刻出錯(cuò)返回,errno是ENXIO。實(shí)例分析與演示fifo_write.cfifo_read.cContents進(jìn)程間通訊概述管道通訊信號(hào)通訊共享內(nèi)存必修實(shí)驗(yàn)信號(hào)通信信號(hào)(signal)機(jī)制是Unix系統(tǒng)中

8、最為古老的進(jìn)程間通信機(jī)制,很多條件可以產(chǎn)生一個(gè)信號(hào):1、當(dāng)用戶按某些按鍵時(shí),產(chǎn)生信號(hào)。2、硬件異常產(chǎn)生信號(hào):除數(shù)為0、無效的存儲(chǔ)訪問等等。這些情況通常由硬件檢測到,將其通知內(nèi)核,然后內(nèi)核產(chǎn)生適

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。