版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
(完整word版)北京工業(yè)大學操作系統(tǒng)實驗報告0122(完整word版)北京工業(yè)大學操作系統(tǒng)實驗報告0122第第頁(完整word版)北京工業(yè)大學操作系統(tǒng)實驗報告0122操作系統(tǒng)實驗報告專業(yè)計算機科學與技術年級本科三年級學號12070131姓名樊文舟目錄:一、實驗一—-————--——-————-—-——--———--———--——--3 1。實驗目的———————————--———————-——-——-——-———-——-—--——————-32。實驗內(nèi)容-———-—-—-—-————————-—————--—-———-—————-3 3.實驗要求—-——————-—-————-—-———-—-—-—-—————————-———--—3 4.實驗設計—--——-——-———--——-———--——-—-—--———--—--————-—-3 5。實驗程序———-—-——-————-—-—-—————-——-—-———--—--——--———-—-3 6.實驗結果—————--—-—--—————————-———--————-——-——-—-—--—--—4 7.實驗感想-—--————-——--—--—--—-———--——--————-—-—-—--4二、實驗二—--————-————-———-—————--—--—4 1.實驗目的—--——-——-—-————--—-——-————-—--——-——————-———52。實驗內(nèi)容—-—————-—-—-—-————-——-————————-————-—--—--5 3。實驗要求-———--——--——————-————--————-—5 4。實驗設計————————-——————--—————--——————-—-—-—--—5 5.實驗程序—--————-——--—-—-———-—-—--—-———-——-——-———————-———-—6 6.實驗結果—-—-—-——--——-—-—--———--——-——--—————--——-—-————-——--——-—7 7.實驗感想———-——-——--————-—-————-——--—————-——--—7三、實驗三-—————-——-—--————--—————--—8 1。實驗目的-———--——--—--————-———--—-————--—-—-——--—-82。實驗內(nèi)容-————-————--——-—--———--———--——-——-—-——-—-——-——-—--——-—8 3.實驗要求————-—-———-—-———-——-—-——-——————--—--——-—-—--———————--8 4.實驗設計-——--——-—-———-——————-——--———-—-—-—-——--——--—-——--————9 5。實驗程序——--—--——-—-——————————--——--————-—--——--—————10 6.實驗結果—-——--—-———-——-————-——-———-—-——--——--—-—-———--—11 7。實驗感想——--—————————-——--———--———-—--——————-—--11四、實驗四——--————--———-———-—--—-—————-———--————-—-12 1。實驗目的———-—————-—--—————-—————--——-——--———-——-—-122。實驗內(nèi)容————-—-—-——--————--—--—-————-—-—-—————-———-12 3.實驗要求—————--——-———--—--——-————-—--—-—--—————12 4。實驗設計———--———————--—-—————-——————————-———-——-—-—--——-—--12 5.實驗結果——-————-———————————————--——-—--————--12 6。實驗感想—-———-——-—————--——-———-——-—--————--————————-—-12個人總結 ——————————-—-————-—————--——-——-——-——-——12實驗一UNIX/LINUX入門實驗目的了解UNIX/LINUX運行環(huán)境,熟悉UNIX/LINUX的常用基本命令,熟悉和掌握UNIX/LINUX下C語言程序的編寫、編譯、調試和運行方法.實驗內(nèi)容1、熟悉UNIX/LINUX的常用基本命令如ls、who、pwd、ps等。(常用Linux命令在附錄中列出,請參閱.)2、熟悉UNIX/LINUX下C語言編譯器cc/gcc的使用方法。編寫一個簡單的顯示“Hello,World!”C語言程序,用gcc編譯并觀察編譯后的結果,然后運行它.具體方法如下:(1)開機選擇Linux操作系統(tǒng)進入,根據(jù)要求輸入用戶名root,密碼rootroot。(2)嘗試使用實驗指導書中提供的各種指令。步驟如下:如果你機器是英文系統(tǒng),找ApplicationsAccessoriesTerminal,并運行。如果你機器是中文系統(tǒng),找應用附件終端,并運行。注意:Terminal是一個命令行系統(tǒng),嘗試運行相關的命令。(3)嘗試寫一個Helloworld程序。步驟如下:選擇一個目錄下創(chuàng)建一個文件example。c雙擊代表example。c的圖標進入編輯器并輸入helloworld代碼保存并退出在終端(Terminal)中對example。c進行編譯.編譯命令為:gccexample.c–oexample運行編譯好的程序。指令為:./example實驗要求按照要求編寫程序,放在相應的目錄中,編譯成功后執(zhí)行。四、實驗設計Linux系統(tǒng)常用命令格式:command[option][argument1][argument2]...五、實驗程序#include<stdio。h〉#include〈stdlib。h>intmain(void){printf(”HelloWorld!\n”);system(”pause");return0;}六、實驗結果七、實驗感想 通過第一次室驗,熟悉了LINUX系統(tǒng)的操作,終端的使用,GCC編譯c程序 實驗二進程管理一、實驗目的加深對進程概念的理解,明確進程與程序的區(qū)別;進一步認識并發(fā)執(zhí)行的實質。二、實驗內(nèi)容(1)進程創(chuàng)建編寫一段程序,使用系統(tǒng)調用fork()創(chuàng)建兩個子進程。當此程序運行時,在系統(tǒng)中有一個父進程和兩個子進程活動.讓每一個進程在屏幕上顯示一個字符:父進程顯示“a“;子進程分別顯示字符”b“和字符“c”.試觀察記錄屏幕上的顯示結果,并分析原因.(提示:對每個進程的打印循環(huán)執(zhí)行10次,則可以發(fā)現(xiàn)執(zhí)行順序的不同)(2)進程控制修改已編寫的程序,將每一個進程輸出一個字符改為用一個循環(huán)輸出1000個字符(父進程輸出1000個“a”,子進程分別輸出1000個“b"和“c”),再觀察程序執(zhí)行時屏幕上出現(xiàn)的現(xiàn)象,并分析原因。(3)進程的管道通信編寫程序實現(xiàn)進程的管道通信。使用系統(tǒng)調用pipe()建立一個無名管道,二個子進程P1和P2分別向管道各寫一句話:Child1issendingamessage!Child2issendingamessage!父進程從管道中讀出二個來自子進程的信息并顯示(要求先接收P1的消息,再接收P2的消息).三、實驗要求按照要求編寫程序,放在相應的目錄中,編譯成功后執(zhí)行,并按照要求分析執(zhí)行結果,并寫出實驗報告。四、實驗設計1、功能設計實驗要求建立一個管道實現(xiàn)父進程和子進程間的通信,子進程有兩個,子進程向管道里寫數(shù)據(jù),父進程從管道里讀出數(shù)據(jù).管道的作用是將兩個緩沖區(qū)相關連起來,使得一個緩沖區(qū)寫的東西可以從另一個緩沖區(qū)讀出來,遵循先進先出的順序。程序的順序是這樣的:先創(chuàng)建子進程1,向管道寫入一句話,子進程1結束后創(chuàng)建子進程2,向管道寫入一句話,最后父進程從管道中讀出。2、數(shù)據(jù)結構子進程:使用pid_tfork()函數(shù)創(chuàng)建,返回值為子進程號。管道:使用intpipe(intfiledis[2])創(chuàng)建無名管道,filedis[2]為兩個文件描述符。子進程1開始3、程序框圖子進程1開始開始開始定義子進程號和文字描述符定義子進程號和文字描述符向管道中寫入數(shù)據(jù)子進程1結束創(chuàng)建子進程1子進程1結束創(chuàng)建子進程1向管道中寫入數(shù)據(jù)子進程2開始子進程2結束向管道中寫入數(shù)據(jù)子進程2開始子進程2結束創(chuàng)建子進程2創(chuàng)建子進程2父進程接收管道中數(shù)據(jù)父進程接收管道中數(shù)據(jù)結束結束五、實驗程序#include〈stdio.h〉#include<string.h〉#include〈unistd。h>intpipe(intfiledis[2]);#defineINPUT0#defineOUTPUT1intmain(){intfile_descriptors[2];pid_tpid1,pid2; //定義子進程charbuf[256]; intreturned_count;pipe(file_descriptors);//創(chuàng)建無名管道if((pid1=fork())==-1)//創(chuàng)建子進程1{printf(”Erroronfork\n");exit(1);}if(pid1==0) {printf("inthespawned(child1)process\n");close(file_descriptors[INPUT]);//關閉通道的讀端write(file_descriptors[OUTPUT],"child1issendingmessage",strlen(”child1issendingmessage”));//向管道中寫一句話exit(0);}else{if((pid2=fork())==-1)//創(chuàng)建子進程2{printf("Erroronfork\n”);exit(1);}if(pid2==0){printf("inthespawned(child2)process\n");close(file_descriptors[INPUT]);//關閉通道的讀端write(file_descriptors[OUTPUT],”child2issendingmessage",strlen("child1issendingmessage”));//向管道中寫一句話exit(0);}else{ //父進程printf(”intheparentprocess\n");close(file_descriptors[OUTPUT]);//關閉管道的寫端returned_count=read(file_descriptors[INPUT],buf,sizeof(buf));printf(”%dbytesofdatareceivedfromspawnedprocess:%s\n",returned_count,buf);//父進程從管道中讀出數(shù)據(jù)}}return0;}六、實驗結果 由圖可知,父進程先后接受了子進程向管道寫入的兩句話,并成功地打印出來.兩個子進程分別向管道寫入了25個字符,并且是子進程1先寫的,子進程2后寫的,故輸出的順序也是如此。七、實驗感想通過本次實驗,我們對進程的概念加深了理解,熟悉了進程的創(chuàng)建方法與作用機制,明確了進程與程序的異同。同時,我們掌握了使用管道通信的機制,進一步認識了并發(fā)執(zhí)行的實質。 實驗三線程的管理一、實驗目的編寫Linux環(huán)境下的多線程程序,了解多線程的程序設計方法,掌握最常用的三個函數(shù)pthread_create,pthread_join和pthread_exit的用法二、實驗內(nèi)容主程序創(chuàng)建兩個線程myThread1和myThread2,每個線程打印一句話。使用pthread_create(&id,NULL,(void*)thread,NULL)完成。提示:先定義每個線程的執(zhí)行體,然后在main中()創(chuàng)建幾個線程,最后主線程等待子線程結束后再退出.2、創(chuàng)建兩個線程,分別向線程傳遞如下兩種類型的參數(shù)傳遞整型值傳遞字符三、實驗要求按照要求編寫程序,放在相應的目錄中,編譯成功后執(zhí)行,并按照要求分析執(zhí)行結果,并寫出實驗報告。四、實驗設計1、創(chuàng)建兩個進程每個進程打印一句話(1)功能設計題目要求創(chuàng)建兩個線程,每個線程打印一句話,可以認為兩個線程的功能是相同的,故只需要寫一個線程的運行函數(shù)thread(),在這個函數(shù)里有一個printf輸出一句話即可。然后在main函數(shù)里分別創(chuàng)建兩個線程,然后等待兩個線程結束。(2)數(shù)據(jù)結構線程:使用pthread_create()創(chuàng)建。每個線程有相應的線程標示符,也有各自的屬性.線程可以和線程運行函數(shù)綁定,并可以在創(chuàng)建線程時確定該線程運行函數(shù)的參數(shù)。(3)程序框圖定義線程標識符開始定義線程標識符開始創(chuàng)建線程2并與thread()創(chuàng)建線程2并與thread()函數(shù)綁定等待線程結束等待線程結束創(chuàng)建線程1并與thread()函數(shù)綁定創(chuàng)建線程1并與thread()函數(shù)綁定結束結束(4)程序#include<stdio.h〉#include〈pthread。h>voidthread(void) //線程運行函數(shù){printf(”Thisisapthread。\n”); //輸出一句話}intmain(void){pthread_tid1,id2; //定義兩個線程標識符inti,ret; ret=pthread_create(&id1,NULL,(void*)thread,NULL);//創(chuàng)建線程標識為id1if(ret!=0){ //線程創(chuàng)建失敗printf(”Createpthreaderror!\n”);exit(1);}ret=pthread_create(&id2,NULL,(void*)thread,NULL);//創(chuàng)建線程標識為id2if(ret!=0){ //線程創(chuàng)建失敗printf(”Createpthreaderror!\n”);exit(1);}printf(”Thisisthemainprocess.\n”);pthread_join(id1,NULL); //等待第一個線程結束pthread_join(id2,NULL); //等待第二個線程結束return(0);}2、創(chuàng)建兩個進程每個進程打印一句話分別向線程傳遞如下兩種類型的參數(shù):整型值、字符(1)功能設計題目要求創(chuàng)建兩個線程,兩個線程分別傳遞int型和char型數(shù)據(jù)給線程運行函數(shù)。所以要編寫兩個不同的線程運行函數(shù)分別接收int型和char型的數(shù)據(jù)。相應的pthread_create()函數(shù)中要給第四個參數(shù),作為形參傳進線程運行函數(shù)。(2)數(shù)據(jù)結構線程:同1,使用pthread_create()創(chuàng)建。每個線程有相應的線程標示符,也有各自的屬性。線程可以和線程運行函數(shù)綁定,并可以在創(chuàng)建線程時確定該線程運行函數(shù)的參數(shù)。(3)程序框圖等待線程結束結束定義線程標識符開始等待線程結束結束定義線程標識符開始創(chuàng)建線程1并與threadchar(char*c)創(chuàng)建線程1并與threadchar(char*c)函數(shù)綁定創(chuàng)建線程2并與threadint(int*n)創(chuàng)建線程2并與threadint(int*n)函數(shù)綁定(4)程序#include〈pthread.h〉#include<stdio.h〉#include〈stdlib。h〉#include〈unistd。h〉voidthreadchar(char*c) //接收字符的線程運行函數(shù){printf(”receiveachar:%c\n",c);}voidthreadint(int*i) //接收整數(shù)的線程運行函數(shù){printf("receiveaint:%d\n",i);}intmain(void){pthread_tid1,id2; //定義兩個線程標識符intret;charc=’t'; char*a=c; //定義char*指針變量傳參數(shù)用ret=pthread_create(&id1,NULL,(void*)threadchar,a); //創(chuàng)建線程1,第四個參數(shù)為char*型變量用來傳遞字符if(ret!=0){ //線程創(chuàng)建失敗printf("Createpthreaderror!\n”);exit(1);}inti=99;int*b=i; //定義int*指針變量傳參數(shù)用ret=pthread_create(&id2,NULL,(void*)threadint,b); //創(chuàng)建線程2,第四個參數(shù)為int*型變量用來傳遞字符if(ret!=0){//線程創(chuàng)建失敗printf(”Createpthreaderror!\n”);exit(1);}printf(”Thisisthemainprocess.\n");pthread_join(id1,NULL);//等待線程1結束pthread_join(id2,NULL); //等待線程2結束return(0);}五、實驗結果由圖可知兩個線程主程序創(chuàng)建了兩個進程這兩個進程分別輸出了一句話主程序分別創(chuàng)建了兩個線程并向線程1傳遞了‘t'向線程2傳遞了99,線程運行函數(shù)分別輸出告知接收了這兩個參數(shù).六、實驗感想通過本次實驗,我學會了如何使用LINUX下的線程創(chuàng)建函數(shù)pthread_create()來創(chuàng)建線程,并且向線程傳遞參數(shù)。同時更加熟練的使用LINUX。 實驗四利用信號量實現(xiàn)進程控制一、實驗目的學習UNIX類(SystemV)操作系統(tǒng)信號量機制,編寫Linux環(huán)境下利用信號量實現(xiàn)進程控制的方法,掌握相關系統(tǒng)調用的使用方法。二、實驗內(nèi)容創(chuàng)建4個線程,其中兩個線程負責從文件讀取數(shù)據(jù)到公共的緩沖區(qū),另兩個線程從緩沖區(qū)讀取數(shù)據(jù)作不同的處理(加和乘運算)。使用信號量控制這些線程的執(zhí)行。提示:(1)參見“四、補充材料”中的相關系統(tǒng)調用的基本用法.(2)創(chuàng)建4個線程,其中2個線程用于從文件中讀數(shù)據(jù)到緩沖區(qū)中(例如:一個進程讀1.dat文件,另一個進程讀2。dat文件),另2個線程從緩沖區(qū)中取數(shù)據(jù)作處理。事先編輯好數(shù)據(jù)文件如:1。dat和2。dat,假設它們的內(nèi)容分別為12345678910和-1—2-3-4-5—6—7—8-9—10,然后運行你編寫的程序,應得到如下類似的結果:Multiply:-1*—2=2
Plus:—1+—2=—3
Multiply:9*10=90
Plus:-9+-10=-19
Multiply:—7*-8=56
Plus:—5+-6=-11
Multiply:—3*-4=12
Plus:9+10=19
Plus:7+8=15
Plus:5+6=11三、實驗要求按照要求編寫程序,放在相應的目錄中,編譯成功后執(zhí)行,并按照要求分析執(zhí)行結果,并寫出實驗報告.四、實驗設計1、功能設計題目要求創(chuàng)建4個線程,其中兩個負責從文件讀數(shù)據(jù)到緩沖區(qū),另兩個負責從緩沖區(qū)讀數(shù)據(jù)進行加和乘的運算。我對這4個線程進行如下安排,線程1讀后線程2才可以讀,線程2讀了后線程3才可以進行加的運算,線程3加完了后線程4才能進行乘的運算,線程4乘完后線程1才能繼續(xù)讀。故需4個信號量sem1,sem2,sem3,sem4.線程1消費sem1生產(chǎn)sem2,線程2消費sem2生產(chǎn)sem3,線程3消費sem3生產(chǎn)sem4,線程4消費sem4生產(chǎn)sem1,形成一個循環(huán),直到文件結束為止.2、數(shù)據(jù)結構信號量(semaphore):數(shù)據(jù)類型為結構sem_t,本質上是一個長整型的數(shù)。一共4個公共緩沖區(qū)(stack):采用2維數(shù)組的方式實現(xiàn)(stack[NUM][2])。數(shù)組中的兩列分別存儲兩個文件中的數(shù)據(jù).該2維數(shù)組還有一個索引:size,指向2維數(shù)組的頂部。讀線程每次從文件讀出兩個數(shù)放到stack[NUM][0]和stack[NUM][1]線程A開始線程A開始程序框圖結束開始 結束開始N到文件尾?定義線程標識符,緩沖區(qū)和信號量N到文件尾?定義線程標識符,緩沖區(qū)和信號量P(sem1)YP(sem1)初始化信號量初始化信號量從文件讀出兩個數(shù)據(jù)到緩沖區(qū)創(chuàng)建4個線程并分別與相應函數(shù)綁定從文件讀出兩個數(shù)據(jù)到緩沖區(qū)創(chuàng)建4個線程并分別與相應函數(shù)綁定線程A結束P(sem2)結束結束等待線程結束線程A結束P(sem2)結束結束等待線程結束線程B開始線程B開始到文件尾?Y到文件尾?NNP(sem2)P(sem2)從文件讀出兩個數(shù)據(jù)到緩沖區(qū)從文件讀出兩個數(shù)據(jù)到緩沖區(qū)P(sem3)P(sem3)線程B結束線程B結束線程D開始線程D開始線程C開始線程C開始到文件尾?到文件尾?線程D結束線程D結束NN到文件尾?到文件尾?PP(sem4)NN線程C結束從緩沖區(qū)取兩個數(shù)相乘線程C結束從緩沖區(qū)取兩個數(shù)相乘PP(sem3)從緩沖區(qū)取兩個數(shù)相加從緩沖區(qū)取兩個數(shù)相加PP(sem1)線程D結束P(sem4)線程D結束P(sem4)線程C結束線程C結束線程D結束線程D結束線程D結束線程D結束線程C結束線程C結束線程D結束線程D結束線程D結束線程D結束五、實驗程序#include〈stdio.h〉#include〈stdlib.h>#include<pthread.h>#include<semaphore。h〉#defineMAXSTACK20intstack[MAXSTACK];inta=0;intb=0;sem_tsem,sem1;voidReadData1(void){) FILE*fp=fopen(”1。dat”,"r");//從文件中讀數(shù)據(jù) sem_wait(&sem1); inti; for(i=0;i<10;i++) fscanf(fp,"%d”,&stack[a++]); sem_post(&sem1); sem_post(&sem); fclose(fp);}voidReadData2(void){ FILE*fp=fopen("2。dat",”r”); sem_wait(&sem1); inti; for(i=0;i〈10;i++) fscanf(fp,”%d",&stack[a++]); sem_post(&sem1); sem_post(&sem); fclose(fp);}voidHandleData1(void){ inti; sem_wait(&sem);//等,讀完了加到1才能處理 for(i=0;i<5;i++){ intm=stack[b++]; intn=stack[b++]; printf("Plus:%d+%d=%d\n",m,n,m+n); }}voidHandleData2(void){ inti; sem_wait(&sem); for(i=0;i<5;i++){ intm=stack[b++]; intn=stack[b++]; printf("Multiply:%d*%d=%d\n”,m,n,m*n); }}intmain(void){ pthread_tt1,t2,t3,t4; sem_init(&sem,0,0);//初始化一個信號量為0,同步 sem_init(&sem1,0,1);//初始化為1,互斥 pthread_create(&t1,NULL,(void*)HandleData1,NULL); pthread_create(&t2,NULL,(void*)HandleData2,NULL); pthread_create(&t3,NULL,(void*)ReadData1,NULL); pthread_create(&t4,NULL,(void*)ReadData2,NULL); pthread_join(t1,NULL);pthread_join(t2,NULL);pthread_join(t3,NULL);pthread_join(t4,NULL);}六、實驗感想通過本次實驗,我進一步掌握了如何使用LINUX下的線程創(chuàng)建函數(shù)pthread_create()創(chuàng)建線程,并且學會了如何使用信號量控制進程的運行,學會了使用消費函數(shù)sem_wait(),生產(chǎn)函數(shù)sem_post(),以及如何初始化信號量,同時也掌握了文件的讀取方法,本次實驗加深了我對信號量的認識。實驗五基于消息隊列和共享內(nèi)存的進程間通信一、實驗目的Linux系統(tǒng)的進程通信機構(IPC)允許在任意進程間大批量地交換數(shù)據(jù)。本實驗的目的是了解和熟悉:Linux支持的消息通信機制及其使用方法Linux系統(tǒng)的共享存儲區(qū)的原理及使用方法。二、實驗內(nèi)容消息的創(chuàng)建、發(fā)送和接收使用消息調用msgget()、msgsnd()、msgrcv()、msgctl()編制長度為1K的消息的發(fā)送和接收程序。共享存儲取得創(chuàng)建、附接和斷接使用系統(tǒng)調用shmget()、shmat()、shmctl(),編制一個與上述功能相同的程序.三、實驗要求按照要求編寫程序,放在相應的目錄中,編譯成功后執(zhí)行,并按照要求分析執(zhí)行結果,并寫出實驗報告。四、實驗設計1、消息的創(chuàng)建、發(fā)送和接收(1)功能設計為了實現(xiàn)進程之間消息的創(chuàng)建、發(fā)送和接收,首先應定義兩個子進程,Server進程負責發(fā)送,Client進程負責接收,父進程負責創(chuàng)建。其次需要用到msgget()、msgsnd()、msggrev()、msgctrl()等函數(shù)進行對消息的控制。題目要求消息長度為1K,那么msgsnd(id,msgp,size,flag)和msgrcv(id,msgp,size,type,flag)函數(shù)中參數(shù)size應設為1024,msgget(key,flag)中的key應為75。父進程獲得創(chuàng)建消息后,子進程Server先后發(fā)送編號為1~10的10條消息,子進程Client先后接收這11條消息,方能達到實驗目的.(2)數(shù)據(jù)結構消息(mymsg):結構體實現(xiàn),包含的成員變量有消息類型和消息內(nèi)容,具體實現(xiàn)如下:structmymsg{ //消息的結構體聲明longintmymsgtype; //消息類型inttext; //消息內(nèi)容};(3)程序框圖子進程Server開始開始結束子進程Server開始開始結束定義子進程號定義子進程號向消息隊列中發(fā)送10條消息向消息隊列中發(fā)送10條消息獲得一個消息的描述符獲得一個消息的描述符子進程Server結束子進程Server結束創(chuàng)建Server子進程創(chuàng)建Server子進程向消息隊列中發(fā)送10條消息子進程Client開始向消息隊列中發(fā)送10條消息子進程Client開始創(chuàng)建Client子進程創(chuàng)建Client子進程子進程Client結束子進程Client結束#include〈stdio.h〉#include〈sys/types.h>#include<unistd.h>#include<sys/ipc。h>#include〈sys/msg.h〉#include〈sys/shm.h〉#defineMAX1024structmymsg{ //消息結構體longintmymsgtype; //消息類型inttext; //消息內(nèi)容}msg;main(void){pid_tpids;//發(fā)送進程pid_tpidc;//接收進程intmsgid;//消息隊列號inti=1;msgid=msgget(KEY,0666|IPC_CREAT);//獲得一個消息的描述符if((pids=fork())==0){ //創(chuàng)建Server子進程while(i<11){msg。mymsgtype=11-i;msg.text=i;printf(”thesendedmessageis%dth\n",i);i++;msgsnd(msgid,&msg,MAX,0);//向msgid指定的消息隊列發(fā)送消息,長度為1K}exit(0);}else{ i=10;if((pidc=fork())==0){//創(chuàng)建Client子進程while(i!=1){msgrcv(msgid,&msg,MAX,0,0);//從msgid指定的消息隊列接收消息printf(”themessageis%dth\n",msg.text);i=msg。mymsgtype;}exit(0);}else{wait(0);//等待子進程結束wait(0);exit(0);}}}2、共享存儲區(qū)的創(chuàng)建、附接和斷接(1)功能設計為了實現(xiàn)進程通過共享存儲區(qū)進行通信,需要創(chuàng)建兩個進程并且調用shmget()、shmat()、shmctl()函數(shù)實現(xiàn)共享存儲區(qū)的創(chuàng)建、附接和斷接.由于共享存儲區(qū)的寫入和讀取由兩個子進程完成,而共享存儲區(qū)在本程序中為所有進程共用的,因此共享存儲區(qū)的創(chuàng)建、附接和斷接均需要在父進程中完成。具體的實現(xiàn)方式是現(xiàn)在父進程中創(chuàng)建一塊共享存儲區(qū),然后用int類型指針list指向該存儲區(qū)的地址;接著創(chuàng)建兩個子進程,第一個子進程通過list指針實現(xiàn)向共享存儲區(qū)寫入int類型的數(shù)據(jù),第二個子進程通過list指針實現(xiàn)從共享存儲區(qū)讀出int類型的數(shù)據(jù).由于兩個子進程同時使用了list指針,所以需要控制兩個進程互斥,在讀進程序中添加了sleep(1)語句。(2)數(shù)據(jù)結構通過shmid=shmget(key,size,flag)函數(shù)建立(獲得)共享存儲區(qū),返回該共享存儲區(qū)的描述符shmid.(3)程序框圖子進程1開始結束
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廈門2025年福建廈門市公安文職人員服務中心招聘17人筆試歷年參考題庫附帶答案詳解
- 2024年起道機(齒條式千斤頂)項目可行性研究報告
- 2025至2031年中國窗簾用透明棒行業(yè)投資前景及策略咨詢研究報告
- 東莞廣東東莞市沙田鎮(zhèn)下屬事業(yè)單位引進高層次人才筆試歷年參考題庫附帶答案詳解
- 上海2025年上海市中醫(yī)藥研究院招聘筆試歷年參考題庫附帶答案詳解
- 2025年廣西桂林市象山區(qū)社區(qū)工作者招聘10人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年廣西桂林市全州縣衛(wèi)生健康系統(tǒng)招聘工作人員245人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年廣西桂平市自然資源局執(zhí)法監(jiān)察大隊招聘編外人員26人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年廣西柳州市融水苗族自治縣自然資源和規(guī)劃局招聘2人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年廣西柳州市柳東新區(qū)生態(tài)環(huán)境局協(xié)辦員招聘2人歷年高頻重點提升(共500題)附帶答案詳解
- 房地產(chǎn)營銷策劃 -佛山龍灣壹號學區(qū)房項目推廣策略提案方案
- 產(chǎn)品共同研發(fā)合作協(xié)議范本5篇
- 風水學的基礎知識培訓
- 吸入療法在呼吸康復應用中的中國專家共識2022版
- 1-35kV電纜技術參數(shù)表
- 信息科技課程標準測(2022版)考試題庫及答案
- 施工組織設計方案針對性、完整性
- 2002版干部履歷表(貴州省)
- DL∕T 1909-2018 -48V電力通信直流電源系統(tǒng)技術規(guī)范
- 2024年服裝制版師(高級)職業(yè)鑒定考試復習題庫(含答案)
評論
0/150
提交評論