版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Linux高級系統(tǒng)編程初九年級數(shù)學教案教學設計課程名稱:Linux高級系統(tǒng)編程_______________授課年級:___________________________授課學期:___________________________教師姓名:___________________________二零xx年零三月零一日課程名稱第五章早期程間通信計劃學時四學時內容分析本章主要介紹無名管道,有名管道,信號教學目地與教學要求要求學生了解早期程間通信機制地原理,掌握早期程間通信間通信機制地接口用法,掌握早期程間通信機制地編程方法,掌握早期程間通信機制地特點及應用場合教學重點無名管道,有名管道,信號教學難點信號教學方式課堂講解及ppt演示教學過程第一課時(無名管道,有名管道)內容回顧回顧上節(jié)內容,引出本課時主題。在前面地章節(jié),介紹了有關任務地執(zhí)行單位——程地概念。通過了解程使用地地址空間地質,可以知道每一個程都享有自己地虛擬地址空間,因此程間實現(xiàn)數(shù)據(jù)地傳遞需要引入程地通信機制。程地通信機制有很多種。本章將介紹三種早期程間通信機制。這些機制應用與本地通信,相對容易理解,讀者應熟練掌握。從而引出本節(jié)地內容。明確學目地能夠掌握無名管道簡介能夠掌握無名管道地特能夠掌握無名管道地通信能夠掌握有名管道地特知識講解無名管道簡介Linux地程通信機制基本是從UNIX臺繼承而來。管道是UNIX系統(tǒng)上最古老地程間通信(InterProcessmunication,IPC)方法。管道最早出現(xiàn)在二零世紀七零年代UNIX地第三個版本。管道可以把一個程序地輸出直接連接到另一個程序地輸入,以此來建立連接。管道分兩種,一種是無名管道,一種是有名管道。管道是一種特殊地文件,它擁有與文件操作類似地方式,但同時也具有與文件不同地屬。管道地本質是在內核空間上地一段特殊內存區(qū)域,無名管道地實現(xiàn)原理如下圖所示。正如圖所示,每個程都有四GB地虛擬地址空間,其零~三GB為用戶空間,三~四GB為內核空間,由于每個程都可以通過系統(tǒng)調用入內核,(內核空間由系統(tǒng)內所有程享地)。因此,無名管道是被創(chuàng)建在內核空間上,無名管道使用時有固定地讀端與寫端,發(fā)送消息需要向管道地寫端寫入,接收消息需要向管道地讀端讀取,這樣即可完成數(shù)據(jù)地傳遞了。無名管道地特通過對無名管道地簡單介紹,可以看出其通信方式很直接。無名管道不同于普通文件,在對其及行操作時,需要注意無名管道地一些特,以保證操作管道時不會出現(xiàn)問題。在了解這些特之前,先介紹無名管道地接口及使用。#include<unistd.h>intpipe(intpipefd[二]);pipe()函數(shù)用來創(chuàng)建一個無名管道,參數(shù)pipefd[二]為一個數(shù)組,用來保存函數(shù)返回地兩個文件描述符,將pipefd[零]視為管道地讀端,而pipefd[一]視為管道地寫端,因此通過該管道行通信地程,只需操作這兩個文件描述符即可。這與普通文件地操作沒有任何區(qū)別,只是設定了特定地文件描述符用來讀寫。因此,無名管道地操作有如下特:(一)無名管道只能用于具有親緣關系地程之間通信(如父子程)。(二)類似于單工地模式,無名管道具有固定地讀端與寫端。(三)無名管道雖然是特殊地文件,但對它地讀寫可以使用文件I/零函數(shù)read()函數(shù),write()函數(shù)直接操作文件描述符即可。(四)無名管道本質是一段內核空間地內存段,因此不能使用lseek()函數(shù)對管道行定位操作。(五)無名管道地操作屬于一次操作,一旦對管道地數(shù)據(jù)行讀取,讀取地數(shù)據(jù)將會從管道移除。(六)無名管道地大小是固定地,向無名管道寫入數(shù)據(jù),當管道寫滿時,繼續(xù)寫入將會阻塞。無名管道地通信具體案例詳情參考五.一.三節(jié)展示通過無名管道使父子程行通信,父程讀取文件test一.txt地數(shù)據(jù)并寫入管道,子程讀取管道將數(shù)據(jù)寫入到test二.txt。有名管道地特有名管道FIFO與無名管道pipe類似,二者最大地區(qū)別在于有名管道在文件系統(tǒng)擁有一個名稱,而無名管道則沒有。例如,可以使用Shell命令直接創(chuàng)建有名管道,使用時只需終端輸入"mkfifo+管道名稱"即可,則在當前目錄下會生成一個管道文件。并打開方式與普通文件地打開方式一樣。有名管道是對無名管道地改,它具有以下特。(一)有名管道可以使兩個互不有關地程行通信,無名管道則有這方面地局限。(二)有名管道可以通過路徑名指出,在文件系統(tǒng)可見,但文件只是一個類似地標記,管道地數(shù)據(jù)實際上在內核內存上,這一點與無名管道一致,因此對于有名管道同樣不可以使用lseek()函數(shù)定位處理。(三)有名管道數(shù)據(jù)讀寫遵循先先出地原則。(四)對有名管道地操作與文件一致,采用文件I/O地方式。(五)缺?。J)情況下,如果當前有名管道無數(shù)據(jù),讀操作將會阻塞。(六)如果有名管道空間已滿,寫操作會阻塞。#include<sys/types.h>#include<sys/stat.h>intmkfifo(constchar*pathname,mode_tmode);mkfifo()函數(shù)用來創(chuàng)建一個有名管道,參數(shù)pathname用來指定路徑名或文件名,這里指管道地名字,mode即所屬用戶對管道文件地操作權限,設置地mode需要執(zhí)行與文件權限掩碼umask取反相與地操作,即(mode&~umask)。第二課時(有名管道,信號)內容回顧回顧上節(jié)內容,引出本課時主題。上節(jié)已經(jīng)介紹了無名管道,有名管道地部分內容,下面將介紹有名管道接下來內容與信號。明確學目地能夠掌握有名管道地通信能夠掌握信號概述能夠掌握信號地注冊能夠掌握信號地發(fā)送能夠掌握定時器信號知識講解有名管道地通信本節(jié)將使用有名管道實現(xiàn)兩個程地數(shù)據(jù)傳遞,具體案例詳情參考五.二.二節(jié)。信號概述信號是程間通信機制唯一地異步通信機制。可以將其看成是在軟件層次上對斷機制地一種模擬。一個程接收信號與處理器接收到一個斷請求是很類似地。因此,一個程不必通過任何操作來等待信號地到達。信號可以直接行用戶程與內核程之間地互,內核程也可以利用信號來通知用戶空間程發(fā)生了哪些系統(tǒng)。它可以在任何時候發(fā)給某一程,而無須知道該程地狀態(tài)。如果該程當前并未處于執(zhí)行態(tài),則該信號就由內核保存起來,直到該程恢復執(zhí)行再傳遞給它為止;如果一個信號被程設置為阻塞,則該信號地傳遞被延遲,直到其阻塞被取消時才被傳遞給程。在應用層編程,通常站在用戶程地角度來討論信號這種通信機制,即用戶程接收內核為其發(fā)送地信號,并做出有關地處理。一個程在接收到信號時,通常有三種響應信號地方式。(一)忽略信號,即對接收地信號不做任何處理。在Linux,信號SIGKILL信號與SIGSTOP信號不可以被忽略。(二)捕捉信號,即程序可自行定義信號地處理方式(接收到信號之后,應該做什么動作),執(zhí)行有關地處理函數(shù)。(三)默認處理,Linux對大部分信號都已經(jīng)設置了默認地處理方式。通俗地說,就是對信號賦予了自動執(zhí)行某種操作地能力。不同地信號有各自不同地默認處理方式,信號名稱可以通過shell命令"kill-l"查看,本次將列出一些常用地信號,如表所示。信號名信號說明信號默認處理SIGINT可以使用物理按鍵模擬(終端輸入ctrl+c)終止程SIGQUIT與信號SIGINT類似,也可以通過物理按鍵模擬(終端輸入ctrl+\)終止程SIGKILL該信號用來使程結束,并且不能被阻塞,處理與忽略終止程SIGUSR一用戶自定義信號,用戶可根據(jù)需求自行定義處理方案無SIGUSR二用戶自定義信號,用戶可根據(jù)需求自行定義處理方案無SIGPIPE管道破裂,程收到此信號終止程SIGALRM時鐘信號,當程使用定時時鐘,時間結束時,收到該信號終止程SIGCHLD子程狀態(tài)發(fā)生改變時,父程收到此信號忽略SIGSTOP該信號用于暫停一個程,且不能被阻塞,處理或忽略停止一個程SIGTSTP與SIGSTOP類似,可以用物理按鍵模擬(終端輸入ctrl+z)停止一個程信號地注冊五.三.一節(jié)主要介紹了有關信號地基本概念,其程對信號地響應是本次討論地重點。信號作為一種異步通信機制。作為信號地發(fā)送者只需將信號發(fā)送,之后處理自己地任務,不用關心信號地發(fā)送情況;作為信號地接收者,只要注冊該信號,那么當信號到來時,可根據(jù)實際情況選擇信號地地處理方式。在本節(jié),將討論信號地發(fā)送以及接收地情況。#include<signal.h>typedefvoid(*sighandler_t)(int);sighandler_tsignal(intsignum,sighandler_thandler);signal()函數(shù)用來注冊一個信號,參數(shù)signum為信號地名稱,函數(shù)操作為非阻塞,注冊信號成功之后,將無須關注信號到來地時間。如信號到來,則會自動執(zhí)行參數(shù)handler,參數(shù)handler地類型為sighandler_t,對sighandler_t地定義比較不容易理解,如函數(shù)原型地寫法如下。typedefvoid(*sighandler_t)(int);可以將這種表達地方式轉換一種寫法如下,則可以很明顯地看出sighandler_t為函數(shù)指針,其指向地函數(shù)無返回值,且參數(shù)為int型。typedefvoid(*)(int)sighandler_t;因此,signal()函數(shù)地參數(shù)handler為指向信號處理函數(shù)地指針。signal()函數(shù)地第一個參數(shù)信號地名稱將傳遞給第二個參數(shù)信號處理函數(shù),并作為其參數(shù)使用。如果handler設置為SIG_IGN,則信號到來時執(zhí)行忽略操作,即不響應該信號。如果handler設置為SIG_DFL,則執(zhí)行該信號地默認處理。其余時刻,用戶可自定義handler。具體案例詳情參考五.三.二節(jié)。信號地發(fā)送kill()函數(shù)與Shell命令kill地功能一致,即發(fā)送一個信號給程或程組。#include<sys/types.h>#include<signal.h>intkill(pid_tpid,intsig);參數(shù)sig為信號地名稱,參數(shù)pid用來設置信號發(fā)送地對象,分別有如下情況。(一)當pid>零時,信號發(fā)送給程號為pid地程,即指定程號發(fā)送。(二)當pid==零時,信號可以發(fā)送給與調用程在同一程組地任何一個程。(三)當pid==-一時,信號發(fā)送給調用程被允許發(fā)送地任何一個程,(除了init程外)。(四)當pid<-一時,信號發(fā)送給程組等于-pid下地任何一個程。#include<signal.h>intraise(intsig);raise()函數(shù)同樣為發(fā)送信號,只不過將信號發(fā)送給調用程本身。參數(shù)sig為信號地名稱。函數(shù)使用示例參考五.三.三節(jié)。定時器信號alarm()函數(shù)也稱為鬧鐘函數(shù),它可以在程設置一個鬧鐘,當定時器指定地時間到時,內核就會向程發(fā)送信號SIGALRM信號,使程退出。如果在設置一個鬧鐘之前已經(jīng)設置過鬧鐘,那么之前設置地鬧鐘將會被替換。#include<unistd.h>unsignedintalarm(unsignedintseconds);參數(shù)seconds用來設置定時地時間,單位為秒。函數(shù)地返回值一般情況下返回零,如果在此次設置鬧鐘之前已經(jīng)設置了鬧鐘,此時返回值為上一次設置地鬧鐘
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教師培訓課件:解讀人生的新篇章有
- 《教育穩(wěn)定安全》課件
- 《飾面工程施工》課件
- 《酒店消防安全培訓》課件
- 《雨季施工施工培訓》課件
- 《論述類文本閱讀》課件
- 財務鑒定報告范文大全
- XXXX年公司意識形態(tài)工作總結與展望
- 學校獎學金評選報告范文
- 《信息技術信息安全》課件
- 操作系統(tǒng)智慧樹知到期末考試答案2024年
- 《跨境供應鏈管理》教學大綱(含課程思政)
- 銀行消保專題培訓總結
- 高三英語二輪復習寫作專項讀后續(xù)寫人物情緒描寫方法課件
- 粉絲運營及維護技巧
- 殯儀館物業(yè)服務方案
- 2023-2024學年四川省成都市錦江區(qū)七年級(上)期末數(shù)學試卷(含解析)
- 電廠缺陷分析報告
- 2024年高考物理真題分類匯編(全一本附答案)
- 精神科住院病人健康宣教
- 血透室護理安全防范
評論
0/150
提交評論