


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、河南城建學(xué)院操作系統(tǒng)課程設(shè)計(jì)說明書設(shè)計(jì)題目: 進(jìn)程通信 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 指導(dǎo)教師: 邵國金、郭猛、薛冰 班 級: 學(xué) 號: 姓 名: 同 組 人: 計(jì)算機(jī)科學(xué)與工程系2013年1 月 10 日前 言本設(shè)計(jì)是基于課程中學(xué)到的UNIX系統(tǒng)調(diào)用,使用操作系統(tǒng)環(huán)境是Red Hat Linux 9,言語開發(fā)環(huán)境是Linux的GNU C或C+。Linux操作系統(tǒng)是一個(gè)向用戶開放源碼的免費(fèi)的類UNIX操作系統(tǒng)。它為在校學(xué)生學(xué)習(xí)操作系統(tǒng)課程提供了一個(gè)看得見摸得著的范例。對于學(xué)生正確理解,掌握操作系統(tǒng)的基本知識具有重要意義。鑒于此,本操作系統(tǒng)課程涉及的實(shí)驗(yàn)均在Linux環(huán)境下進(jìn)行。這就要求大家:(1
2、)熟悉Linux的操作和開發(fā)環(huán)境;(2)具有C語言知識(Linux操作系統(tǒng)大約90%的源碼是用C語言編寫)。我們的設(shè)計(jì)和實(shí)驗(yàn)將在Windows xp環(huán)境下,基于虛擬機(jī)軟件VMWare軟件進(jìn)行安裝。學(xué)習(xí)計(jì)算機(jī)軟件技術(shù),特別是計(jì)算機(jī)操作系統(tǒng)技術(shù),除了需要刻苦努力外,還需要掌握軟件和操作系統(tǒng)的原理與設(shè)計(jì)技巧。如何學(xué)習(xí)和掌握操作系統(tǒng)技術(shù)的原理與實(shí)際技巧呢?除了聽課和讀書之外,最好的方法恐怕就是在實(shí)踐中練習(xí)。例如,自己設(shè)計(jì)一個(gè)小型操作系統(tǒng),多使用操作系統(tǒng),多閱讀和分析操作源代碼等。但由于我們的條件和學(xué)時(shí)有限,在理論學(xué)習(xí)過程中沒有給同學(xué)們提供更多的實(shí)驗(yàn)機(jī)會。基于共享內(nèi)存的進(jìn)程通信,通過在兩個(gè)進(jìn)程間創(chuàng)建一塊
3、共享內(nèi)存,將共享內(nèi)存塊分為兩部分,標(biāo)示位和數(shù)據(jù)域。通過實(shí)踐讓我們了解了什么是共享內(nèi)存通信機(jī)制,實(shí)現(xiàn)了程序進(jìn)程間的通信。積極通過合作,完成任務(wù)。目錄一、系統(tǒng)開發(fā)環(huán)境- 4 -二、設(shè)計(jì)目的- 5 -三、設(shè)計(jì)題目及要求- 6 -四、總體設(shè)計(jì)- 7 -1、服務(wù)器功能- 7 -2、客戶端功能- 7 -3、文件讀取功能- 8 -4、界面顯示函數(shù)- 8 -5、組成框圖:- 9 -6.共享內(nèi)存分配- 9 -7.總體流程圖- 10 -五、詳細(xì)設(shè)計(jì)- 11 -1.主函數(shù)- 11 -2.菜單顯示- 11 -3.服務(wù)器端:- 12 -4.客戶端程序:- 14 -5、部分函數(shù)介紹- 15 -六、調(diào)試與測試- 17 -七
4、、執(zhí)行結(jié)果及分析- 18 -八、源程序清單- 20 -九、心得體會- 25 -十、參考文獻(xiàn)- 26 -一、系統(tǒng)開發(fā)環(huán)境Windows Xp系統(tǒng)、虛擬機(jī)上運(yùn)行的Red Hat Linux 9系統(tǒng)運(yùn)行環(huán)境。二、設(shè)計(jì)目的1、進(jìn)一步了解什么是進(jìn)程,以及創(chuàng)建進(jìn)程的方式。2、實(shí)現(xiàn)UNIX/LINUX系統(tǒng)環(huán)境下的進(jìn)程通信方式。3、熟練掌握C/S中的共享內(nèi)存通信機(jī)制。4、開辟一個(gè)共享區(qū),實(shí)現(xiàn)進(jìn)程共享資源,互相通信。三、設(shè)計(jì)題目及要求利用UNIX系統(tǒng)提供的進(jìn)程通信機(jī)制實(shí)現(xiàn)通信以及共享內(nèi)存區(qū)的實(shí)現(xiàn)(1) 共享存儲區(qū)的創(chuàng)建,附接和斷接使用系統(tǒng)調(diào)用shmget(),shmat(),msgdt(),shmctl(),編
5、制一長度為1K的消息發(fā)送和接收的程序。1)為了便于操作和觀察結(jié)果,用一個(gè)程序作為“引子”,先后fork()兩個(gè)子進(jìn)程,SERVER和CLIENT,進(jìn)行通信。SERVER和CLIENT也可分別為2個(gè)各自獨(dú)立的程序。2)SERVER端建立一個(gè)Key為375的共享區(qū),并將第一個(gè)字節(jié)置為-1,作為數(shù)據(jù)空的標(biāo)志,等待其他進(jìn)程發(fā)來的消息。當(dāng)該字節(jié)的值發(fā)生變化時(shí),表示收到了信息,并進(jìn)行處理。然后再次把它的值設(shè)為-1。如果遇到的值為0,則視為結(jié)束信號,取消該隊(duì)列,并退出SERVER。SERVER每接收到一次數(shù)據(jù)后顯示“(server)received”。3)CLIENT端建立一個(gè)Key為375的共享區(qū),當(dāng)共享
6、取得第一個(gè)字節(jié)為-1時(shí),SERVER端空閑,可發(fā)送請求。CLIENT隨即填入9到0。期間等待Server端的再次空閑。進(jìn)行完這些操作后,CLIENT退出。CLIENT每發(fā)送一次數(shù)據(jù)后顯示“(client)sent”。4)父進(jìn)程在SERVER和CLIENT均退出后結(jié)束。(2)功能擴(kuò)展:在sever端創(chuàng)建一個(gè)服務(wù)函數(shù),從而形成C/S通訊模式要求SERVER每接收到一次數(shù)據(jù)后不僅僅顯示“(server)received”,而是做一些其它事情,比如讀取或查詢某個(gè)文件等。此功能可由設(shè)計(jì)者自己定義。四、總體設(shè)計(jì)1.服務(wù)器功能服務(wù)器共有四塊共享內(nèi)存,分別用addr1,addr2,addr3,addr4接收,
7、其中addr1為整形指針,addr1,addr2,addr3為結(jié)構(gòu)體型指針,結(jié)構(gòu)體的定義如下:Typedef strcut addressInt mark; Char ch20;address;其中的mark成員用來作為標(biāo)記為標(biāo)示共享內(nèi)存塊的狀態(tài),-1表示該內(nèi)存塊空閑,服務(wù)端可以發(fā)送服務(wù)請求,1,2,3這分別表示服務(wù)器正在處理不同的服務(wù)請求,客戶端需等待。而字符數(shù)組成員ch則用來將各個(gè)客戶端的文件中的數(shù)據(jù)放入對應(yīng)的共享內(nèi)存塊中,與服務(wù)器交換數(shù)據(jù)。而內(nèi)存塊之所以既能實(shí)現(xiàn)客戶端與服務(wù)器的通信,又能相互之間交換數(shù)據(jù),在于shmat函數(shù)的返回值為void*,可以將其轉(zhuǎn)化為任意類型的指針變量,該函數(shù)調(diào)用
8、如下:Addr1=(address*)shmat(shmid1,1024,0);Addr2=(address*)shmat(shmid2,1024,0);Addr3=(address*)shmat(shmid31024,0);該四塊共享內(nèi)存分別用于實(shí)現(xiàn)接受各個(gè)客戶端的服務(wù)請求,處理客戶端1,客戶端2,客戶端3的服務(wù)請求。各個(gè)共享內(nèi)存模塊的處理方法基本一致,即服務(wù)器處理完客戶端的請求,將addr置為-1,即表示自己已空閑,可以接受服務(wù)請求;客戶端發(fā)出服務(wù)請求后,等待服務(wù)器處理,一旦服務(wù)得到相應(yīng),將addr置為1或2或3。2.客戶端功能可具體分成3個(gè)客戶端,每個(gè)客戶端均包含兩塊共享內(nèi)存,第一塊用于
9、發(fā)送請求,其鍵值為各個(gè)客戶端所知,第二塊用于與服務(wù)器交互階段的數(shù)據(jù)傳遞,其鍵值僅有本客戶端與服務(wù)器知道。每塊共享內(nèi)存一包含兩部分:1用于表示共享內(nèi)存塊的狀態(tài)的addr1->mark,2用于保存本客戶端數(shù)據(jù)信息的數(shù)據(jù)域。其所在的進(jìn)程完成自己的請求后,調(diào)用exit(0)退出本進(jìn)程。其分配共享內(nèi)存塊的系統(tǒng)的調(diào)用函數(shù)為:Shmid1=shmget(SHMKEY,1024,0777|IPC_CREAT);Shmid2=shmget(SHMKEY,1024,0777|IPC_CREAT);Shmid3=shmget(SHMKEY,1024,0777|IPC_CREAT);至于內(nèi)存共享的實(shí)現(xiàn)方式,與服
10、務(wù)器相同。3.文件讀取功能 每個(gè)客戶端均設(shè)置此功能,例如購買手機(jī)卡時(shí),客戶端1需檢索自己的文件中是否存在該號碼,如果已存在,則提示客戶改號碼已注冊,需重新選擇。該功能模塊涉及到:1讀文件2查找對于讀文件,首先需打開文件,該函數(shù)定義一個(gè)文件型指針fp,賦值操作為:Fp=fopen(“Info.txt”,”rw+”);打開文件成功后,利用fgetc()函數(shù)從文件中一個(gè)一個(gè)字符的讀取,當(dāng)遇到n時(shí),說明一個(gè)號碼已經(jīng)讀取完畢。其函數(shù)使用如下:C=fgetc();While(!feof(fp)If(c=n) Numberi=0; I=-1;Else Numberi=c;C=fgetc();+I;對于本系統(tǒng)
11、的檢索功能,因?yàn)槲募淖x取操作較慢,很有可能使客戶端進(jìn)程阻塞,故設(shè)置一個(gè)cellnumber()函數(shù),使其預(yù)先將本文件中的所有號碼全部讀出,放入一個(gè)字符型二維數(shù)組中,這樣當(dāng)服務(wù)器需檢索文件中號碼時(shí),直接從該二維數(shù)組中檢索即可,大大提高了檢索速度。檢索所采用的方法是順序查找法,可以達(dá)到預(yù)定的速度要求。4.界面顯示函數(shù) 即系統(tǒng)中的display()函數(shù),其包含四個(gè)功能選項(xiàng):1:購買手機(jī)卡;2:手機(jī)充值;3;辦理網(wǎng)銀;4:;退出本系統(tǒng)前三項(xiàng)功能每一項(xiàng)對應(yīng)一個(gè)客戶進(jìn)程,具體哪項(xiàng)進(jìn)程由choice變量控制。5.組成框圖: 總體服務(wù) 3個(gè)客戶端 display() cellnumber() 服務(wù)器端6.共
12、享內(nèi)存分配 共享內(nèi)存區(qū) -1 由SERVER端開辟一塊用來與各個(gè)客戶端通信的共享內(nèi)存區(qū) 共享內(nèi)存區(qū)-1 客戶1與服務(wù)器端共享內(nèi)存區(qū)。 共享內(nèi)存區(qū)-1 客戶2與服務(wù)器端共享內(nèi)存區(qū)共享內(nèi)存區(qū)-1 客戶3與服務(wù)器端共享內(nèi)存區(qū)。7.總體流程圖開始i=0i=fork()Cellnumber文件信息 Y N i=fork()Serverr服務(wù)器i=0 Y NClient()Client(1)Chioice=Client(2) YClient(3) N結(jié)束 總體流程圖1五、詳細(xì)設(shè)計(jì)1.主函數(shù)int main()int choice,i; char ch520; display(); do printf(&q
13、uot;請選擇一項(xiàng)功能項(xiàng):n"); scanf("%d",&choice); fflush(stdin); while(choice!=1&&choice!=2&&choice!=3&&choice!=4) printf("輸入有誤,請重新輸入:n"); scanf("%d",&choice); fflush(stdin); if(choice=4) return 0; else while(i=fork()=-1); if(!i)server(ch); els
14、e while (i=fork()=-1); if(!i)client(choice); wait(0);wait(0); while(choice!=4);return 0;2.菜單顯示void display()printf("-n");int i;for(i=1;i<=15;+i)if(i=3|i=6|i=9|i=12)if(i=3) printf("| 1.購買手機(jī)卡: |n");if(i=6) printf("| 2.手機(jī)充值: |n");if(i=9) printf("| 3.辦理網(wǎng)銀: |n")
15、;if(i=12) printf("| 4.退出本系統(tǒng): |n");elseprintf("| |n");printf("-n");3.服務(wù)器端:void server() char ch120;int shmid1,shmid2,shmid3,shmid4;shmid=shmget(SHMKEY,1024,0777|IPC_CREAT);addr=shmat(shmid,0,0);*addr=-1;while(*addr=-1);if(*addr=1) char c; char number50='0' FILE *
16、fp; if(fp=fopen("Info.txt","rw+")=NULL) printf("文件未能打開!n"); return ; shmid1=shmget(CLIENTONE,1024,0777|IPC_CREAT);addr1=shmat(shmid1,0,0);printf("請輸入您喜歡的手機(jī)號碼:n"); addr1->makr=-1; while(addr1->makr=-1);if(addr1->makr=1) c=fgetc(fp); int i=0; while (!fe
17、of(fp) if(c='n') numberi='0' i=-1; if(!strcmp(number,addr1->ch) printf("號碼已經(jīng)占用,請重新選擇一個(gè):n"); return ; else numberi=c; c=fgetc(fp); +i; printf("手機(jī)號碼已選定,請繳費(fèi)100元:n");addr1->makr=-1;while(addr1->makr=-1);if(addr1->makr=2)printf("交易完成,祝您愉快!n");shmc
18、tl(shmid1,IPC_RMID,0);if(*addr=2)shmid2=shmget(CLIENTTWO,1024,0777|IPC_CREAT);addr2=shmat(shmid2,0,0);printf("請輸入您的手機(jī)號碼:n");addr2->makr=-1;while(addr2->makr=-1);if(addr2->makr=1)printf("Input Your Payroll:n");addr2->makr=-1;while(addr2->makr=-1);if(addr2->makr=2
19、)printf("充值完成!n");shmctl(shmid2,IPC_RMID,0);if(*addr=3) shmid3=shmget(CLIENTTHREE,1024,0777|IPC_CREAT);addr3=shmat(shmid3,0,0);printf("請輸入您的身份證號:n");addr3->makr=-1;while(addr3->makr=-1);if(addr3->makr=1)printf("請輸入您的手機(jī)號碼:n");addr3->makr=-1;while(addr3->ma
20、kr=-1);if(addr3->makr=2)printf("辦理完成,祝您愉快!n");shmctl(shmid3,IPC_RMID,0);shmctl(shmid,IPC_RMID,0);4.客戶端程序:void client(int choice) int shmid1,shmid2,shmid3; int payroll;char ch120,ch250;shmid=shmget(SHMKEY,1024,0777|IPC_CREAT);addr=shmat(shmid,0,0); while(*addr!=-1);if(choice=1) *addr=1;s
21、hmid1=shmget(CLIENTONE,1024,0777|IPC_CREAT);addr1=shmat(shmid1,0,0);while(addr1->makr!=-1);scanf("%s",addr1->ch);addr1->makr=1;while(addr1->makr!=-1);printf("已繳費(fèi)100元!n");addr1->makr=2;if(choice=2)*addr=2;shmid2=shmget(CLIENTTWO,1024,0777|IPC_CREAT);addr2=shmat(shmi
22、d2,0,0);while(addr2->makr!=-1);scanf("%s",ch1);addr2->makr=1;while(addr2->makr!=-1); scanf("%d",&payroll);addr2->makr=2; if(choice=3) *addr=3;shmid3=shmget(CLIENTTHREE,1024,0777|IPC_CREAT);addr3=shmat(shmid3,0,0);while(addr3->makr!=-1);scanf("%s",ch1)
23、;addr3->makr=1;while(addr3->makr!=-1);scanf("%s",ch2);addr3->makr=2;5.部分函數(shù)介紹1.int fork()創(chuàng)建一個(gè)新進(jìn)程。用法:int fork()其中返回int取值意義如下:0:創(chuàng)建子進(jìn)程,從子進(jìn)程返回的id值>0:從父進(jìn)程返回的子進(jìn)程id值-1:創(chuàng)建失敗2.int shmget(key,size,shmflg|IPC_CREAT)頭文件: #include<sys/shm.h> #include<sys/ipc.h>參數(shù)定義:key:為申請共享內(nèi)存的標(biāo)示
24、符;size:為申請共享內(nèi)存的大??;shmflg:用戶設(shè)置的標(biāo)識或訪問方式,與消息緩沖shmget中的含義相同,這實(shí)驗(yàn)中可以使用0777|IPC_CREAT,表示任意進(jìn)程可讀可寫。IPC_CREAT:當(dāng)shmflg&IPC_CREAT為真時(shí),如果內(nèi)核中不存在鍵值與key相等的共性內(nèi)存,則新建一個(gè)共享內(nèi)存;如果存在這樣的共享內(nèi)存,返回此共享內(nèi)存的標(biāo)識符。利用此系統(tǒng)調(diào)用在內(nèi)存中開辟一塊共享區(qū)。用法: int shmget()返回值為開辟出來共享內(nèi)存的標(biāo)號。3.void *shmat(int shmid,const void *shmaddr,int shmflg)頭文件: #include
25、<sys/shm.h> #include<sys/types.h>參數(shù)定義:shmid:表示申請共享內(nèi)存空間的標(biāo)示符。shmaddr:指定共享內(nèi)存出現(xiàn)在進(jìn)程內(nèi)存地址什么位置,直接指定為NULL讓內(nèi)核自己決定一個(gè)合適的位置shmflg:SHM_RDONLY為只讀模式,其他為讀寫模式。返回值為共享內(nèi)存的首地址。4.int shmctl(int shmid,int cmd,strucr shmid_ds *buf)頭文件: #include<sys/types.h> #include<sys/shm.h>參數(shù)定義:Shmid:共享內(nèi)存標(biāo)識符。該系統(tǒng)使用
26、了內(nèi)存共享機(jī)制來實(shí)現(xiàn)進(jìn)程之間的通信與數(shù)據(jù)傳遞,其包含四個(gè)大的功能模塊:1:服務(wù)器功能,即server函數(shù);2:客戶端功能,即client函數(shù);3:讀取各個(gè)客戶端文件功能,即cellnumber函數(shù)4:界面顯示函數(shù),即display函數(shù)下面是每個(gè)功能模塊的具體分析過程:六、調(diào)試與測試任務(wù)一編譯方法: 編譯:cc liulong.c執(zhí)行:./a.out任務(wù)二編譯方法是:編譯:cc o endend endend.c執(zhí)行./endend運(yùn)行時(shí),根據(jù)選擇不同的功能選項(xiàng)來啟動(dòng)不同客戶端,而server端作為服務(wù)器仍將繼續(xù)運(yùn)行,你再次啟動(dòng)client來請求服務(wù)。七、執(zhí)行結(jié)果及分析當(dāng)選這功能項(xiàng)1時(shí),客戶1與
27、服務(wù)器建立共享區(qū)來建立通信,這里用到了和文件相關(guān)聯(lián),在當(dāng)前目錄下有一個(gè)文件,文件中有五條電話號碼記錄,當(dāng)客戶選擇自己的電話號碼是如果輸入的電話號碼和文件中五條記錄中的一項(xiàng)相同就會彈出“手機(jī)號碼已存在,請重新選擇!”這句話也就是說該號碼已被別人注冊并使用,提示用戶重新選擇自己的號碼。通過編譯后進(jìn)入該程序,如果輸入的不是當(dāng)前功能項(xiàng)提供的幾個(gè)選項(xiàng)會彈出來錯(cuò)誤提示,提示用戶重新輸入想要選擇的功能項(xiàng),這里用到了fflush(stdin)這個(gè)函數(shù),當(dāng)輸入有誤時(shí)會清除掉緩沖區(qū)中的數(shù)據(jù)以便于用戶再次輸入。當(dāng)選擇功能項(xiàng)2時(shí),這是一個(gè)為用戶充值的服務(wù),選中該功能項(xiàng)時(shí)客戶端2會和服務(wù)器建立基于共享內(nèi)存的通信,這是用
28、戶可以輸入自己的電話號碼,這里也可以關(guān)聯(lián)到文件,可以在當(dāng)前目錄下創(chuàng)建一個(gè)文件,其中記錄了用戶的電話號碼和對應(yīng)的余額,根據(jù)這個(gè)來為用戶提供要充值的服務(wù)。當(dāng)選擇功能項(xiàng)3時(shí),這是一個(gè)為用戶辦理網(wǎng)銀的服務(wù),該功能也可以和文件相關(guān)聯(lián),在當(dāng)前目錄下建立一個(gè)文件其中記錄了用戶的電話號碼、身份證號,根據(jù)用戶輸入共享區(qū)的數(shù)據(jù),把共享區(qū)中的數(shù)據(jù)取出和文件中已存在的數(shù)據(jù)作比較,可以得到是否該用戶已存在進(jìn)而來為用戶提供辦理網(wǎng)銀的服務(wù)。當(dāng)各項(xiàng)功能服務(wù)都不需要時(shí),可以選擇退出本系統(tǒng),選擇功能項(xiàng)4時(shí)自動(dòng)退出本服務(wù)系統(tǒng)。八、源程序清單#include<stdio.h>#include<sys/types.h
29、>#include<sys/ipc.h>#include<sys/shm.h>#include<string.h>#define SHMKEY 75#define CLIENTONE 100#define CLIENTTWO 150#define CLIENTTHREE 200void cellnumber(char phonenumber520)int j=0; char c;char number20='0'FILE *fp;if(fp=fopen("Info.txt","rw+")=NULL
30、)printf("文件未能打開!n");return ;c=fgetc(fp);int i=0;while (!feof(fp)if(c='n')numberi='0'i=-1;strcpy(phonenumberj,number);j+;elsenumberi=c;c=fgetc(fp);+i;typedef struct addreint makr;char ch50;addre;addre *addr1,*addr2,*addr3;int shmid,*addr;void server(char phonenumber520) char
31、 ch120;int shmid1,shmid2,shmid3,shmid4;int i;shmid=shmget(SHMKEY,1024,0777|IPC_CREAT);addr=shmat(shmid,0,0);*addr=-1;while(*addr=-1);if(*addr=1) shmid1=shmget(CLIENTONE,1024,0777|IPC_CREAT);addr1=shmat(shmid1,0,0);printf("請輸入您喜歡的手機(jī)號碼:n");addr1->makr=-1;while(addr1->makr=-1);if(addr1-
32、>makr=1) for(i=0;i<5;+i)if(strcmp(phonenumberi,addr1->ch)printf("手機(jī)號碼已存在,請重新選擇!n");return ; printf("手機(jī)號碼已選定,請繳費(fèi)100元:n");addr1->makr=-1;while(addr1->makr=-1);if(addr1->makr=2)printf("交易完成,祝您愉快!n");shmctl(shmid1,IPC_RMID,0);if(*addr=2)shmid2=shmget(CLIEN
33、TTWO,1024,0777|IPC_CREAT);addr2=shmat(shmid2,0,0);printf("請輸入您的手機(jī)號碼:n");addr2->makr=-1;while(addr2->makr=-1);if(addr2->makr=1)printf("Input Your Payroll:n");addr2->makr=-1;while(addr2->makr=-1);if(addr2->makr=2)printf("充值完成!n");shmctl(shmid2,IPC_RMID,0
34、);if(*addr=3) shmid3=shmget(CLIENTTHREE,1024,0777|IPC_CREAT);addr3=shmat(shmid3,0,0);printf("請輸入您的身份證號:n");addr3->makr=-1;while(addr3->makr=-1);if(addr3->makr=1)printf("請輸入您的手機(jī)號碼:n");addr3->makr=-1;while(addr3->makr=-1);if(addr3->makr=2)printf("辦理完成,祝您愉快!n&
35、quot;);shmctl(shmid3,IPC_RMID,0);shmctl(shmid,IPC_RMID,0);void client(int choice) int shmid1,shmid2,shmid3; int payroll;char ch120,ch250;shmid=shmget(SHMKEY,1024,0777|IPC_CREAT);addr=shmat(shmid,0,0); while(*addr!=-1);if(choice=1) *addr=1;shmid1=shmget(CLIENTONE,1024,0777|IPC_CREAT);addr1=shmat(shmi
36、d1,0,0);while(addr1->makr!=-1);scanf("%s",addr1->ch);addr1->makr=1;while(addr1->makr!=-1);printf("已繳費(fèi)100元!n");addr1->makr=2;if(choice=2)*addr=2;shmid2=shmget(CLIENTTWO,1024,0777|IPC_CREAT);addr2=shmat(shmid2,0,0);while(addr2->makr!=-1);scanf("%s",ch1);
37、addr2->makr=1;while(addr2->makr!=-1); scanf("%d",&payroll);addr2->makr=2; if(choice=3) *addr=3;shmid3=shmget(CLIENTTHREE,1024,0777|IPC_CREAT);addr3=shmat(shmid3,0,0);while(addr3->makr!=-1);scanf("%s",ch1);addr3->makr=1;while(addr3->makr!=-1);scanf("%s",ch2);addr3->makr=2;exit(0);void display()printf("-n");int i;for(i=1;i<=15;+i)if(i=3|i=6|i=9|i=12)if(i=3) printf("| 1.購買手機(jī)卡: |n");if(i=6) printf("| 2.手機(jī)充值: |n");if(i=9) printf("| 3.辦理網(wǎng)銀: |n");if(i=12) printf("
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國汽車門拉手市場調(diào)查研究報(bào)告
- 2025年中國松鷹牛座筆筒市場調(diào)查研究報(bào)告
- 地下室抗浮措施在城市規(guī)劃中的重要性
- 新員工入職培訓(xùn)通知樣本
- 2025年中國廣告筆市場調(diào)查研究報(bào)告
- 小學(xué)生藝術(shù)素養(yǎng)提升工作計(jì)劃
- 四年級下音樂素養(yǎng)提升計(jì)劃
- 小學(xué)勞動(dòng)教育創(chuàng)新實(shí)踐方案
- 數(shù)字產(chǎn)品使用與近視防控計(jì)劃
- 幼兒園音樂與藝術(shù)教學(xué)計(jì)劃
- XX化工企業(yè)停工安全風(fēng)險(xiǎn)評估報(bào)告
- 2025年濟(jì)源職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫學(xué)生專用
- 全國川教版信息技術(shù)八年級下冊第二單元第3節(jié)《評價(jià)文創(chuàng)作品》教學(xué)設(shè)計(jì)
- 急診科護(hù)理創(chuàng)新管理
- 臨邊防護(hù)安全培訓(xùn)課件
- 專題04-完形填空2023年高考英語三模試題分項(xiàng)匯編(新高考八省專用)-(原卷版)
- 物理治療學(xué)(人衛(wèi)三版)
- 房屋市政工程生產(chǎn)安全重大事故隱患判定標(biāo)準(zhǔn)(2024版)宣傳海報(bào)
- 湖北省黃岡八模2025屆高三第一次模擬考試數(shù)學(xué)試卷含解析
- 道路工程交通安全設(shè)施施工方案及保障措施
- 花粉購銷合同范例
評論
0/150
提交評論