




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四次小課進程間通信(上)華軟軟件工程系進程間通信實驗課主要內(nèi)容本周大課內(nèi)容回顧通過實驗理解軟中斷信號機制以及如何通過軟中斷實現(xiàn)父子進程同步通過實驗理解無名管道通信主要內(nèi)容第一部分本周大課內(nèi)容回顧軟中斷管道通信主要內(nèi)容大課內(nèi)容回顧(1)進程間通信根據(jù)信息量不同能劃分成哪兩種類型?兩種類型有何區(qū)別?進程控制(控制信息的通信,低級通信)數(shù)據(jù)交換(大批數(shù)據(jù)的通信,高級通信)OS為進程間通信提供的常用接口有哪些?Linux支持哪些機制?接口軟中斷信號、信號量集管道、消息隊列、共享內(nèi)存等Linux支持的有:軟中斷信號、管道、IPC(信號量、消息緩沖、共享內(nèi)存)大課內(nèi)容回顧(2)軟中斷信號主要用于解決何種問題?如何使用軟中斷信號?管道的定義?無名管道的工作原理是?無名管道能否進行雙向通信?無名管道能否在任意進程間通信?Linux軟中斷信號的系統(tǒng)調(diào)用(1)軟中斷信號的預(yù)置函數(shù)signal()調(diào)用格式:signal(sig,function)說明:sig軟中斷信號的序號或名稱function與軟中斷信號關(guān)聯(lián)的函數(shù)名Linux軟中斷信號的系統(tǒng)調(diào)用(2)發(fā)送軟中斷信號函數(shù)kill()調(diào)用格式:kill(pid,sig)說明:pid表示一個或一組進程標示符,pid值的定義如下:
>0:將信號發(fā)送給指定的進程
=0:將信號發(fā)送給同組的所有進程=-1:將信號發(fā)送給所有滿足如下條件的進程:進程的用戶標示符等于發(fā)送信號進程的有效用戶標示符Sig為軟中斷信號(序號或名稱)Linux管道通信(1)無名管道的創(chuàng)建系統(tǒng)調(diào)用:intpipe(intPipeName[2]);參數(shù)說明:PipeName[2],管道名,為一2元整型數(shù)組PipeName[0]專用于讀進程PipeName[1]專用于寫進程返回值:整型。0代表管道創(chuàng)建正確;-1代表管道創(chuàng)建失敗。該管道由創(chuàng)建進程及其子孫進程共享使用頭文件:unistd.hLinux管道通信(2)無名管道的讀寫系統(tǒng)調(diào)用寫:write(PipeName[1],buf,size);讀:read(PipeName[0],buf,size);參數(shù)說明:PipeName,管道名。其中[0]專用于管道的讀操作,[1]專用于管道的寫操作buf,存放讀或者寫數(shù)據(jù)的緩沖區(qū)size,讀或者寫數(shù)據(jù)的長度(字節(jié)數(shù))第二部分進程間通信實驗軟中斷管道通信主要內(nèi)容實驗1軟中斷實驗4-1.c:編寫一個程序,循環(huán)顯示字符串”Hello!”,當鍵盤鍵入ctrl+c時終止循環(huán),并顯示“OK!”后結(jié)束。代碼及結(jié)果如圖所示改造:要求按3次Ctrl+C后才結(jié)束將signal()語句和函數(shù)刪除后重新編譯看結(jié)果有何變化?實驗1軟中斷實驗(4-1.c)#include<stdio.h>#include<stdlib.h>#include<signal.h>//voidint_func(intsig);intk;voidint_func(intsig){ k=0; printf("int_func\n");}main(){ signal(SIGINT,int_func); k=1; while(k==1) { printf("Hello!\n"); } printf("OK!\n"); exit(0);}實驗2使用軟中斷實現(xiàn)父子進程同步假設(shè)父進程先執(zhí)行,父進程顯示3行字符串;父進程向子進程發(fā)送軟中斷信號,等待子進程終止后,父進程輸出結(jié)束信息”O(jiān)K!”,然后終止執(zhí)行。子進程循環(huán)顯示”Iamachild!”,接收到父進程發(fā)來的軟信號后停止循環(huán),顯示”childexited!”并終止執(zhí)行。分析:父子父同步結(jié)果如圖所示(子進程先執(zhí)行的結(jié)果)改寫如果把kill()函數(shù)注釋掉,結(jié)果將如何?為什么?分別注釋掉代碼中的信號函數(shù)會有怎樣的結(jié)果,為什么?把第一個sleep(1)改成sleep(10)又會有什么樣的結(jié)果,為什么?如果一定要子進程先執(zhí)行,如何改寫?4-2.c#include<stdio.h>#include<stdlib.h>#include<signal.h>intk1;voidint_fun1(){ k1=0;}main(){ intk,p1; while((p1=fork())==-1); if(p1>0) { for(k=1;k<4;k++) { printf("Howareyou!\n"); sleep(1);//延時函數(shù)sleep(),延時1秒
} kill(p1,12); wait(0); printf("OK!\n"); exit(0); } else { signal(12,int_fun1); k1=1; while(k1==1) { printf("Iamchild\n"); sleep(1); } printf("Childexited!\n"); exit(0); }}實驗3無名管道應(yīng)用文件名4-4.c:父進程創(chuàng)建一個子進程和一個無名管道fd,由子進程向管道寫入信息”Thisisamessage!”,然后終止執(zhí)行;父進程接收到子進程終止信號后從管道中讀出并顯示信息后結(jié)束。注意:管道的創(chuàng)建、管道數(shù)據(jù)的讀寫改造:父進程創(chuàng)建兩個子進程P1、P2,P1向管道的寫數(shù)據(jù)“PipeMessageTest”,P2從管道讀數(shù)據(jù)并顯示這些數(shù)據(jù)。思考:類似這種父子進程之間的數(shù)據(jù)通信還有什么解決方案?4-4.c#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<string.h>main(){ intp1,fd[2]; charoutpipe[50];//定義讀緩沖區(qū)
//charinpipe[50]="Thisisamessage!";//定義寫緩沖區(qū)
charinpipe[50]; pipe(fd);//創(chuàng)建無名管道fd while((p1=fork())==-1); if(p1==0)//子進程返回
{ strcpy(inpipe,"Thisisamessage!"); write(fd[1],inpipe,50) ;//寫信息到管道
exit(0); } else//父進程返回
{ wait(0);//
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 出借咨詢服務(wù)協(xié)議
- 聯(lián)合研究開發(fā)協(xié)議
- 辦公項目總結(jié)與未來展望報告
- 地坪澆筑勞務(wù)分包合同
- 獨院買賣合同協(xié)議書
- 磚砌體工程施工合同協(xié)議書
- 高效辦公流程優(yōu)化解決方案
- 媒體資源共享合作框架協(xié)議
- 制作細胞的結(jié)構(gòu)模型(第1課時)教學(xué)設(shè)計-2024-2025學(xué)年蘇科版生物七年級上冊
- 寫字樓照明設(shè)計施工方案
- 路基換填級配碎石施工方案
- EIM Book 1 Unit 7 Learning languages單元檢測試題
- 四川省政府采購評審專家考試題庫
- GB/T 34875-2017離心泵和轉(zhuǎn)子泵用軸封系統(tǒng)
- GB/T 25085.3-2020道路車輛汽車電纜第3部分:交流30 V或直流60 V單芯銅導(dǎo)體電纜的尺寸和要求
- GA/T 1081-2020安全防范系統(tǒng)維護保養(yǎng)規(guī)范
- 2023一年級下冊語文教學(xué)工作計劃(2篇)
- 2022年云上貴州大數(shù)據(jù)(集團)有限公司招聘筆試試題及答案解析
- (虎符銅砭刮痧)基本理論及臨床應(yīng)用課件
- 文件袋、檔案袋密封條模板
- 依圖科技業(yè)務(wù)概述
評論
0/150
提交評論