版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、. . . . 城建學(xué)院操作系統(tǒng)課程設(shè)計說明書設(shè)計題目: 進(jìn)程通信 專 業(yè): 計算機(jī)科學(xué)與技術(shù) 指導(dǎo)教師: 邵國金、郭猛、薛冰 班 級:學(xué) 號:姓 名:同 組 人:計算機(jī)科學(xué)與工程系2013年1 月 10 日前 言本設(shè)計是基于課程中學(xué)到的UNIX系統(tǒng)調(diào)用,使用操作系統(tǒng)環(huán)境是Red Hat Linux 9,言語開發(fā)環(huán)境是Linux的GNU C或C+。Linux操作系統(tǒng)是一個向用戶開放源碼的免費(fèi)的類UNIX操作系統(tǒng)。它為在校學(xué)生學(xué)習(xí)操作系統(tǒng)課程提供了一個看得見摸得著的例。對于學(xué)生正確理解,掌握操作系統(tǒng)的基本知識具有重要意義。鑒于此,本操作系統(tǒng)課程涉與的實(shí)驗(yàn)均在Linux環(huán)境下進(jìn)行。這就要求大家:(
2、1)熟悉Linux的操作和開發(fā)環(huán)境;(2)具有C語言知識(Linux操作系統(tǒng)大約90%的源碼是用C語言編寫)。我們的設(shè)計和實(shí)驗(yàn)將在Windows xp環(huán)境下,基于虛擬機(jī)軟件VMWare軟件進(jìn)行安裝。學(xué)習(xí)計算機(jī)軟件技術(shù),特別是計算機(jī)操作系統(tǒng)技術(shù),除了需要刻苦努力外,還需要掌握軟件和操作系統(tǒng)的原理與設(shè)計技巧。如何學(xué)習(xí)和掌握操作系統(tǒng)技術(shù)的原理與實(shí)際技巧呢?除了聽課和讀書之外,最好的方法恐怕就是在實(shí)踐中練習(xí)。例如,自己設(shè)計一個小型操作系統(tǒng),多使用操作系統(tǒng),多閱讀和分析操作源代碼等。但由于我們的條件和學(xué)時有限,在理論學(xué)習(xí)過程中沒有給同學(xué)們提供更多的實(shí)驗(yàn)機(jī)會?;诠蚕泶娴倪M(jìn)程通信,通過在兩個進(jìn)程間創(chuàng)建一塊
3、共享存,將共享存塊分為兩部分,標(biāo)示位和數(shù)據(jù)域。通過實(shí)踐讓我們了解了什么是共享存通信機(jī)制,實(shí)現(xiàn)了程序進(jìn)程間的通信。積極通過合作,完成任務(wù)。目錄一、系統(tǒng)開發(fā)環(huán)境- 4 -二、設(shè)計目的- 5 -三、設(shè)計題目與要求- 6 -四、總體設(shè)計- 7 -1、服務(wù)器功能- 7 -2、客戶端功能- 7 -3、文件讀取功能- 8 -4、界面顯示函數(shù)- 8 -5、組成框圖:- 9 -6.共享存分配- 9 -7.總體流程圖- 10 -五、詳細(xì)設(shè)計- 11 -1.主函數(shù)- 11 -2.菜單顯示- 11 -3.服務(wù)器端:- 12 -4.客戶端程序:- 14 -5、部分函數(shù)介紹- 15 -六、調(diào)試與測試- 17 -七、執(zhí)行結(jié)
4、果與分析- 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è)計目的1、進(jìn)一步了解什么是進(jìn)程,以與創(chuàng)建進(jìn)程的方式。2、實(shí)現(xiàn)UNIX/LINUX系統(tǒng)環(huán)境下的進(jìn)程通信方式。3、熟練掌握C/S中的共享存通信機(jī)制。4、開辟一個共享區(qū),實(shí)現(xiàn)進(jìn)程共享資源,互相通信。三、設(shè)計題目與要求利用UNIX系統(tǒng)提供的進(jìn)程通信機(jī)制實(shí)現(xiàn)通信以與共享存區(qū)的實(shí)現(xiàn)(1) 共享存儲區(qū)的創(chuàng)建,附接和斷接使用系統(tǒng)調(diào)用shmget(),shmat(),msgdt(),shmctl(),編制一長度為1
5、K的消息發(fā)送和接收的程序。1)為了便于操作和觀察結(jié)果,用一個程序作為“引子”,先后fork()兩個子進(jìn)程,SERVER和CLIENT,進(jìn)行通信。SERVER和CLIENT也可分別為2個各自獨(dú)立的程序。2)SERVER端建立一個Key為375的共享區(qū),并將第一個字節(jié)置為-1,作為數(shù)據(jù)空的標(biāo)志,等待其他進(jìn)程發(fā)來的消息。當(dāng)該字節(jié)的值發(fā)生變化時,表示收到了信息,并進(jìn)行處理。然后再次把它的值設(shè)為-1。如果遇到的值為0,則視為結(jié)束信號,取消該隊列,并退出SERVER。SERVER每接收到一次數(shù)據(jù)后顯示“(server)received”。3)CLIENT端建立一個Key為375的共享區(qū),當(dāng)共享取得第一個字
6、節(jié)為-1時,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)建一個服務(wù)函數(shù),從而形成C/S通訊模式要求SERVER每接收到一次數(shù)據(jù)后不僅僅顯示“(server)received”,而是做一些其它事情,比如讀取或查詢某個文件等。此功能可由設(shè)計者自己定義。四、總體設(shè)計1.服務(wù)器功能服務(wù)器共有四塊共享存,分別用addr1,addr2,addr3,addr4接收,其中addr1
7、為整形指針,addr1,addr2,addr3為結(jié)構(gòu)體型指針,結(jié)構(gòu)體的定義如下:Typedef strcut addressInt mark; Char ch20;address;其中的mark成員用來作為標(biāo)記為標(biāo)示共享存塊的狀態(tài),-1表示該存塊空閑,服務(wù)端可以發(fā)送服務(wù)請求,1,2,3這分別表示服務(wù)器正在處理不同的服務(wù)請求,客戶端需等待。而字符數(shù)組成員ch則用來將各個客戶端的文件中的數(shù)據(jù)放入對應(yīng)的共享存塊中,與服務(wù)器交換數(shù)據(jù)。而存塊之所以既能實(shí)現(xiàn)客戶端與服務(wù)器的通信,又能相互之間交換數(shù)據(jù),在于shmat函數(shù)的返回值為void*,可以將其轉(zhuǎn)化為任意類型的指針變量,該函數(shù)調(diào)用如下:Addr1=(a
8、ddress*)shmat(shmid1,1024,0);Addr2=(address*)shmat(shmid2,1024,0);Addr3=(address*)shmat(shmid31024,0);該四塊共享存分別用于實(shí)現(xiàn)接受各個客戶端的服務(wù)請求,處理客戶端1,客戶端2,客戶端3的服務(wù)請求。各個共享存模塊的處理方法基本一致,即服務(wù)器處理完客戶端的請求,將addr置為-1,即表示自己已空閑,可以接受服務(wù)請求;客戶端發(fā)出服務(wù)請求后,等待服務(wù)器處理,一旦服務(wù)得到相應(yīng),將addr置為1或2或3。2.客戶端功能可具體分成3個客戶端,每個客戶端均包含兩塊共享存,第一塊用于發(fā)送請求,其鍵值為各個客戶端
9、所知,第二塊用于與服務(wù)器交互階段的數(shù)據(jù)傳遞,其鍵值僅有本客戶端與服務(wù)器知道。每塊共享存一包含兩部分:1用于表示共享存塊的狀態(tài)的addr1->mark,2用于保存本客戶端數(shù)據(jù)信息的數(shù)據(jù)域。其所在的進(jìn)程完成自己的請求后,調(diào)用exit(0)退出本進(jìn)程。其分配共享存塊的系統(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);至于存共享的實(shí)現(xiàn)方式,與服務(wù)器一樣。3.文件讀取功能 每個客戶
10、端均設(shè)置此功能,例如購買手機(jī)卡時,客戶端1需檢索自己的文件中是否存在該,如果已存在,則提示客戶改已注冊,需重新選擇。該功能模塊涉與到:1讀文件2查找對于讀文件,首先需打開文件,該函數(shù)定義一個文件型指針fp,賦值操作為:Fp=fopen(“Info.txt”,”rw+”);打開文件成功后,利用fgetc()函數(shù)從文件中一個一個字符的讀取,當(dāng)遇到n時,說明一個已經(jīng)讀取完畢。其函數(shù)使用如下:C=fgetc();While(!feof(fp)If(c=n)Numberi=0;I=-1;ElseNumberi=c;C=fgetc();+I;對于本系統(tǒng)的檢索功能,因?yàn)槲募淖x取操作較慢,很有可能使客戶端進(jìn)
11、程阻塞,故設(shè)置一個cellnumber()函數(shù),使其預(yù)先將本文件中的所有全部讀出,放入一個字符型二維數(shù)組中,這樣當(dāng)服務(wù)器需檢索文件中時,直接從該二維數(shù)組中檢索即可,大大提高了檢索速度。檢索所采用的方法是順序查找法,可以達(dá)到預(yù)定的速度要求。4.界面顯示函數(shù) 即系統(tǒng)中的display()函數(shù),其包含四個功能選項:1:購買手機(jī)卡;2:手機(jī)充值;3;辦理網(wǎng)銀;4:;退出本系統(tǒng)前三項功能每一項對應(yīng)一個客戶進(jìn)程,具體哪項進(jìn)程由choice變量控制。5.組成框圖: 總體服務(wù) 3個客戶端 display() cellnumber() 服務(wù)器端6.共享存分配 共享存區(qū)-1 由SERVER端開辟一塊用來與各個客戶
12、端通信的共享存區(qū) 共享存區(qū)-1 客戶1與服務(wù)器端共享存區(qū)。 共享存區(qū)-1客戶2與服務(wù)器端共享存區(qū)共享存區(qū)-1 客戶3與服務(wù)器端共享存區(qū)。7.總體流程圖開始i=0i=fork()Cellnumber文件信息 Y Ni=fork()Serverr服務(wù)器i=0 Y NClient()Client(1)Chioice=Client(2) YClient(3) N結(jié)束 總體流程圖1五、詳細(xì)設(shè)計1.主函數(shù)int main()int choice,i; char ch520; display(); do printf("請選擇一項功能項:n"); scanf("%d"
13、,&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); else while (i=fork()=-1); if(!i)client(choice)
14、; 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");if(i=12) printf("| 4.退出本系統(tǒng): |n")
15、;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 *fp; if(fp=fopen("Info.txt","
16、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 (!feof(fp) if(c='n') numberi='0'
17、i=-1; if(!strcmp(number,addr1->ch) printf("已經(jīng)占用,請重新選擇一個: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");shmctl(shmid1,IPC_RMID,0);if(*addr=2)shmid2=shmget(CL
18、IENTTWO,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,
19、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->makr=-1);if(addr3->makr=2)printf("辦理完成,祝您愉快!n"
20、;);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;shmid1=shmget(CLIENTONE,1024,0777|IPC_CREAT);addr1=shmat(
21、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(shmid2,0,0);while(addr2->makr!=-1);scanf("%s",c
22、h1);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("
23、%s",ch2);addr3->makr=2;5.部分函數(shù)介紹1.int fork()創(chuàng)建一個新進(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:為申請共享存的標(biāo)示符;size:為申請共享存的大??;shmflg:用戶設(shè)置的標(biāo)識或訪問方式,與消息緩沖shmget中的含義一樣,這實(shí)
24、驗(yàn)中可以使用0777|IPC_CREAT,表示任意進(jìn)程可讀可寫。IPC_CREAT:當(dāng)shmflg&IPC_CREAT為真時,如果核中不存在鍵值與key相等的共性存,則新建一個共享存;如果存在這樣的共享存,返回此共享存的標(biāo)識符。利用此系統(tǒng)調(diào)用在存中開辟一塊共享區(qū)。用法: int shmget()返回值為開辟出來共享存的標(biāo)號。3.void *shmat(int shmid,const void *shmaddr,int shmflg)頭文件: #include<sys/shm.h> #include<sys/types.h>參數(shù)定義:shmid:表示申請共享存空間
25、的標(biāo)示符。shmaddr:指定共享存出現(xiàn)在進(jìn)程存地址什么位置,直接指定為NULL讓核自己決定一個合適的位置shmflg:SHM_RDONLY為只讀模式,其他為讀寫模式。返回值為共享存的首地址。4.int shmctl(int shmid,int cmd,strucr shmid_ds *buf)頭文件: #include<sys/types.h> #include<sys/shm.h>參數(shù)定義:Shmid:共享存標(biāo)識符。該系統(tǒng)使用了存共享機(jī)制來實(shí)現(xiàn)進(jìn)程之間的通信與數(shù)據(jù)傳遞,其包含四個大的功能模塊:1:服務(wù)器功能,即server函數(shù);2:客戶端功能,即client函數(shù);3
26、:讀取各個客戶端文件功能,即cellnumber函數(shù)4:界面顯示函數(shù),即display函數(shù)下面是每個功能模塊的具體分析過程:六、調(diào)試與測試任務(wù)一編譯方法: 編譯:cc liulong.c執(zhí)行:./a.out任務(wù)二編譯方法是:編譯:cc o endend endend.c執(zhí)行./endend運(yùn)行時,根據(jù)選擇不同的功能選項來啟動不同客戶端,而server端作為服務(wù)器仍將繼續(xù)運(yùn)行,你再次啟動client來請求服務(wù)。七、執(zhí)行結(jié)果與分析當(dāng)選這功能項1時,客戶1與服務(wù)器建立共享區(qū)來建立通信,這里用到了和文件相關(guān)聯(lián),在當(dāng)前目錄下有一個文件,文件中有五條記錄,當(dāng)客戶選擇自己的是如果輸入的和文件中五條記錄中的一
27、項一樣就會彈出“手機(jī)已存在,請重新選擇!”這句話也就是說該已被別人注冊并使用,提示用戶重新選擇自己的。通過編譯后進(jìn)入該程序,如果輸入的不是當(dāng)前功能項提供的幾個選項會彈出來錯誤提示,提示用戶重新輸入想要選擇的功能項,這里用到了fflush(stdin)這個函數(shù),當(dāng)輸入有誤時會清除掉緩沖區(qū)中的數(shù)據(jù)以便于用戶再次輸入。當(dāng)選擇功能項2時,這是一個為用戶充值的服務(wù),選中該功能項時客戶端2會和服務(wù)器建立基于共享存的通信,這是用戶可以輸入自己的,這里也可以關(guān)聯(lián)到文件,可以在當(dāng)前目錄下創(chuàng)建一個文件,其中記錄了用戶的和對應(yīng)的余額,根據(jù)這個來為用戶提供要充值的服務(wù)。當(dāng)選擇功能項3時,這是一個為用戶辦理網(wǎng)銀的服務(wù),
28、該功能也可以和文件相關(guān)聯(lián),在當(dāng)前目錄下建立一個文件其中記錄了用戶的、號,根據(jù)用戶輸入共享區(qū)的數(shù)據(jù),把共享區(qū)中的數(shù)據(jù)取出和文件中已存在的數(shù)據(jù)作比較,可以得到是否該用戶已存在進(jìn)而來為用戶提供辦理網(wǎng)銀的服務(wù)。當(dāng)各項功能服務(wù)都不需要時,可以選擇退出本系統(tǒng),選擇功能項4時自動退出本服務(wù)系統(tǒng)。八、源程序清單#include<stdio.h>#include<sys/types.h>#include<sys/ipc.h>#include<sys/shm.h>#include<string.h>#define SHMKEY 75#define CLI
29、ENTONE 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)printf("文件未能打開!n");return ;c=fgetc(fp);int i=0;while (!feof(fp)if(c='n')numberi='0&
30、#39;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 ch120;int shmid1,shmid2,shmid3,shmid4;int i;shmid=shmget(SHMKEY,1024,0777|IPC_CREAT);addr=shmat(shmid,0,0
31、);*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->makr=1) for(i=0;i<5;+i)if(strcmp(phonenumberi,addr1->ch)printf("手機(jī)已存在,請重新選擇!n");return ;p
32、rintf("手機(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(CLIENTTWO,1024,0777|IPC_CREAT);addr2=shmat(shmid2,0,0);printf("請輸入您的手機(jī):n");addr2->makr=-1;while(addr2->
33、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);if(*addr=3) shmid3=shmget(CLIENTTHREE,1024,0777|IPC_CREAT);addr3=shmat(shmid3,0,0);printf("請輸入您的號:n");ad
34、dr3->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");shmctl(shmid3,IPC_RMID,0);shmctl(shmid,IPC_RMID,0);void client(int choice) int shmid1,shmid2,shmid3; int payroll;c
35、har 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(shmid1,0,0);while(addr1->makr!=-1);scanf("%s",addr1->ch);addr1->makr=1;while(addr1->makr!=-1);printf(&q
36、uot;已繳費(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);addr2->makr=1;while(addr2->makr!=-1); scanf("%d",&payroll);addr2->makr=2; if(choice=3) *addr=3;shm
37、id3=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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版互聯(lián)網(wǎng)企業(yè)員工勞動合同意向書
- 2025版旅游安全責(zé)任協(xié)議書標(biāo)準(zhǔn)模板3篇
- 2024年食品零售商零食采購協(xié)議示例
- 2024年綜合運(yùn)輸服務(wù)協(xié)議范本集版B版
- 2024年跨國教育合作辦學(xué)具體合同范本版B版
- 課題申報書:大學(xué)生志愿服務(wù)參與第三次分配的路徑探索及成效檢驗(yàn)
- 2025版綠色建筑公司股權(quán)收購與轉(zhuǎn)讓合同3篇
- 課題申報書:促進(jìn)制造業(yè)數(shù)字化創(chuàng)新的差異性減稅政策精準(zhǔn)調(diào)節(jié)理論與實(shí)現(xiàn)路徑研究
- 2024年度企業(yè)并購擔(dān)保合同執(zhí)行與交易安全協(xié)議3篇
- 2025版B101、B201型號教育培訓(xùn)機(jī)構(gòu)合作辦學(xué)合同3篇
- 全國城市車牌代碼一覽表
- 小區(qū)物業(yè)弱電維護(hù)方案
- 典型地鐵突發(fā)事件應(yīng)急管理案例分析上海地鐵碰撞事故
- 廣西柳州市2023-2024學(xué)年四年級上學(xué)期期末考試語文試卷
- 《芯片制造工藝》課件
- 中山大學(xué)研究生中特考試大題
- 手術(shù)室護(hù)理實(shí)踐指南術(shù)中低體溫預(yù)防
- 四川省成都市2022-2023學(xué)年六年級上學(xué)期語文期末考試試卷(含答案)5
- (病理科)提高HE切片優(yōu)良率PDCA
- Creo-7.0基礎(chǔ)教程-配套課件
- 全國火車站編碼
評論
0/150
提交評論