




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
基于linux網絡聊天室的設計【實用文檔】doc文檔可直接使用可編輯,歡迎下載
基于linux網絡聊天室的設計【實用文檔】doc文檔可直接使用可編輯,歡迎下載《Linux操作系統(tǒng)》課程設計報告學院工商學院專業(yè)計算機科學與技術班級計1341學生姓名:王慢,韓霞,孫潔茹,李強,蔣濤課程設計任務書題目基于linux網絡聊天室的設計實驗目的:《Linux操作系統(tǒng)課程設計B》是一門在課程《Linux操作系統(tǒng)與程序設計B》后獨立開設的實驗課程。這一門實驗課程的開設目的是為了通過學生獨立完成一個基于Linux平臺的較大型應用程序,鞏固課堂上學到的Linux平臺上的編程規(guī)范、技術和技巧,培養(yǎng)學生的編寫較大型程序的能力和提高學生綜合應用素質。本課程設計實驗主要圍繞Linux平臺上主流的基礎技術展開,這些技術包括:Linux的進程、線程通信和同步技術;socket網絡通信技術等,這些技術可以集中體現(xiàn)并應用在并發(fā)程序設計中.通過并發(fā)程序的設計與開發(fā),培養(yǎng)學生底層軟件開發(fā)的能力,并為將來從事UNIX/Linux平臺開發(fā)、嵌入式開發(fā)等相對高端的軟件開發(fā)工作打下基礎。課程設計的具體內容與要求:閱讀(一個)示例代碼,理解并發(fā)程序設計并掌握基于Linux平臺并發(fā)程序設計的方法.在充分理解示例程序的基礎上,重新定義和完善程序的功能,定義數(shù)據(jù)結構,劃分程序的功能模塊和接口,明確每個模塊功能以及相互關系。完成程序的詳細設計和編碼,并測試。書寫并提交文檔目錄TOC\o”1-3”\h\z\uHYPERLINK\h\z\uHYPERLINK\l"_Toc258930473”基于Linux網絡聊天室的設計PAGEREF_Toc258930473\h1HYPERLINK\l"_Toc258930474"1背景PAGEREF_Toc258930474\h3HYPERLINK\l"_Toc258930475”1.1linux介紹PAGEREF_Toc258930475\h32技術說明PAGEREF_Toc258930476\h62。1TCP和UDP通信的概念PAGEREF_Toc258930477\h62.1。1UDP通信PAGEREF_Toc258930478\h62.1。2TCP通信PAGEREF_Toc258930479\h62。2客戶/服務器模型PAGEREF_Toc258930480\h72.3網絡套接字(socket)的概念PAGEREF_Toc258930481\h8HYPERLINK\l"_Toc258930482"2。4多線程的概念PAGEREF_Toc258930482\h83系統(tǒng)實現(xiàn)PAGEREF_Toc258930483\h10HYPERLINK\l"_Toc258930484"3.1Linux提供的有關Socket的系統(tǒng)調用PAGEREF_Toc258930484\h10HYPERLINK\l”_Toc258930485”3.2實驗過程說明(使用TCP/IP)PAGEREF_Toc258930485\h123。3TCP通信實現(xiàn)PAGEREF_Toc258930486\h134運行效果PAGEREF_Toc258930487\h19HYPERLINK\l"_Toc258930488”結束語PAGEREF_Toc258930488\h22HYPERLINK\l"_Toc258930489"參考文獻PAGEREF_Toc258930489\h241背景開發(fā)背景在網絡無所不在的今天,在Internet上,有ICQ、MSN、Gtalk、OICQ等網絡聊天軟件,極大程度上方便了處于在世界各地的友人之間的相互聯(lián)系,也使世界好像一下子縮小了,不管你在哪里,只要你上了網,打開這些軟件,就可以給你的朋友發(fā)送信息,不管對方是否也同時在線,只要知道他有號碼。Linux操作系統(tǒng)作為一個開源的操作系統(tǒng)被越來越多的人所應用,它的好處在于操作系統(tǒng)源代碼的公開化!只要是基于GNU公約的軟件你都可以任意使用并修改它的源代碼.但對很多習慣于Windows操作系統(tǒng)的人來說,Linux的操作不夠人性化、交互界面不夠美觀,這給Linux操作系統(tǒng)的普及帶來了很大的阻礙.因此制作一個Linux操作系統(tǒng)下的擁有人性化界面的實時通訊工具,將給那些剛剛接觸Linux操作系統(tǒng)的用戶帶來極大的方便,而且通過設計這樣的一個應用程序還能更好的學習網絡編程知識和掌握LINUX平臺上應用程序設計開發(fā)的過程,將大學四年所學知識綜合運用,以達到檢驗學習成果的目的linux介紹Linux是一種針對PC計算機和工作站的操作系統(tǒng),它具有像Windows和Mac那樣的功能齊全的圖形用戶界面(GUI,GraphicalUserInterface)。LinusTorvald和其它的遍布世界各地的編程人員共同開發(fā)的。作為一種操作系統(tǒng),它具有與Unix,Mac,Windows和WindowsNT同樣的功能。
提到Linux我們不能不提GNU和Unix。RichardM。Stallman建立的自由軟件聯(lián)盟出版了兩種許可證,GNU通用公共許可證(GNUGneralPublicLicense,GPL)和GNU函數(shù)庫通用公共許可證(GNULibraryGneralPublicLicense,LGPL)。大部分GNU工程的軟件和文檔是以GNU通用公共許可證發(fā)行的,但是有一些庫是以GNU函數(shù)庫通用公共許可證發(fā)行的。按照GNU通用公共許可證的規(guī)定,Linux的源代碼可以自由獲取,這滿足了我們學習該系統(tǒng)的強烈愿望。GPL充分體現(xiàn)了Stallman的思想:只要用戶所做的修改是同等自由的,用戶可以自由地使用、拷貝、查詢、重用、修改甚至發(fā)布這個軟件。通過這種方式,GPL保證了Linux(以及同一許可證下的大量其他軟件)不僅現(xiàn)在自由可用,而且皮后經過任何修改這后都仍然可以自由使用。
Unix是由AT—T貝爾實驗室的KenThompson和DennisRitchie于1969年在一臺已經廢棄了的PDP-7上開發(fā)的;最初它是一個用匯編語言寫成的單用戶操作系統(tǒng)。后來,他們又在PDP-11上用C語言重新編寫(發(fā)明C語言的部分目的就在于此),把Unix做成為了一個文本處理系統(tǒng),這使Unix在貝爾實驗室得到廣泛的應用。Unix的最初版本免費提供給許多知名的大學的計算機系使用。加州大學伯克利分校的計算機系就是其中的一名,并地Unix進行了修改增加了許多新的特點,這就是主為人知的BSC版本的Unix.與此同時,其它獨立開發(fā)的Unix版本也開始萌生。Unix不斷發(fā)展了,各種版本被應用到不同的計算機使用。而Linux最初是專門為基于Intel的個人計算機設計的。(1)Linux的昨天1991年,一名叫LinusTorvalds的芬蘭大學生對Unix各種版本對于80386類的機器的脆弱支持十分不滿,他決定要開發(fā)出一個全功能的、支持POSIX標準的、類Unix的操作系統(tǒng)內核,該系統(tǒng)吸收了BSD和SystemV的優(yōu)點,同進摒棄了它們的缺點。他獨立把這個內核開發(fā)到0.02版,這個版本已經可以運行gcc、bash和很少的一些應用程序。后來,他又開始了在因特網上尋求廣泛的幫助.
1994年,Linux已經升級到1.0版本.它的源代碼量也呈指數(shù)形式增長,實現(xiàn)了基本的TCP/IP功能,此時Linux已經擁有大約10萬的用戶。
(2)Linux的今天作為一各服務器級的操作系統(tǒng),Linux已經成熟了?,F(xiàn)在的Linux內核由150多行代碼組成,能作為Web服務器平臺,也為越來越多的商業(yè)用戶提供文件和打印服務。它既被當作郵件服務器的一種候選平臺,也被當作一種強壯而安全的防火墻.
Linux的企業(yè)級特性,比如支持多處理器、支持大型文件系統(tǒng)、日志文件系統(tǒng)以及密集型計算和高可用性集群技術,也逐步成熟。?桌面上的Linux也在繼續(xù)完善.KDE桌面提供的圖形用戶界面在易用性和可配置方面都能和微軟的Windows相媲美.?(3)Linux的明天Linux最強大的生命力在于其公開的開發(fā)過程。每個人都有可以自由獲取內核源程序,每個人都有要不得以運載源程序加以修改,而后他人也可以自由獲取你修改后的源程序。Linux這種獨特的自由流暢的開發(fā)模型已被命名為bazaar(集市模型).Bazaar開發(fā)模型通過重視實驗,征集并充分利用早期的反饋,對巨大數(shù)量的腦力資源進行平衡配置,可以開發(fā)出更優(yōu)秀的軟件。本聯(lián)盟就是想通過bazaar開發(fā)模型,在網上召集一些Linux的愛好者,開發(fā)出更優(yōu)秀的操作系統(tǒng)或軟件.2技術說明2。1TCP和UDP通信的概念2。1.1UDP通信UDP是用戶數(shù)據(jù)報協(xié)議的簡稱。它是以中午連接的邏輯通信信道。UDP在傳送數(shù)據(jù)之前不需要先建立連接,遠地主機的傳輸層在收到udp數(shù)據(jù)報后,不需要給出任何確認,所以不能保證其交付時可靠.它的特點是:因無連接,故提供的是不可靠的信道,但也是因無連接而具有很好的傳輸效率.2.1。2TCP通信TCP是傳輸控制協(xié)議的簡稱,它是提供一條全雙工的、可靠的信道。TCP提供面向連接的服務,在傳送數(shù)據(jù)之前必須先建立連接,數(shù)據(jù)傳送結束后要釋放連接。TCP不提供廣播和多播服務。由于TCP要提供可靠的、面向連接的運輸服務,所以不可避免地增加了許多系統(tǒng)開銷,比如確認、流量控制、計時器以及連接管理等都需要占用許多系統(tǒng)的時空資源。兩個計算機之間如果使用TCP通信,其連接過程需要三次握手實現(xiàn),如實驗圖1-1所示.圖1-1用三次握手建立TCP連接對于兩個計算機之間連接的釋放過程也需要類似的3次握手的互相確認的過程,如實驗圖1-2所示。圖1-2TCP連接的釋放過程2。2客戶/服務器模型MP10-284—EP12—CAMC-186A在客戶/服務器模型中,多個相互通信的計算機都作為客戶端,與網絡服務器進行連接,并通過服務器進行信息的傳遞。所以多個客戶端之間的通信就變?yōu)榱丝蛻舳伺c服務端的通信.所以,采用客戶/服務器模型進行網絡聊天需要分別編寫服務器端和客戶端的程序,服務器和客戶端之間相互通信的同步關系和各自的程序流程如實驗圖1—3所示。圖1-3Socket通信流程圖2.3網絡套接字(socket)的概念Socket接口上TCP/IP網絡應用程序接口(API),它提供了許多函數(shù)和例程,程序員可以使用它們來開發(fā)TCP/IP網絡應用程序。使用Socket接口進行網絡通信的過程如圖1—3所示,簡要步驟如下:建立一個Socket.按要求配置socket,將socket連接到遠程主機或給socket指定以各本地協(xié)議端口。按要求通過socket發(fā)送和接受數(shù)據(jù)。關閉此socket。這是通過Socket實現(xiàn)點對點通信需要掌握的4個編程要點。2.4多線程的概念上述點對點通信的實現(xiàn)知識完成了主機進程與服務器進程之間的連接,建立連接的進程之間是一對一的聯(lián)系,即主機的一個進程與服務器的一個進程之間建立的連接.而每個進程進行通信的環(huán)節(jié)都包括了發(fā)送信息和接口信息兩個任務,這兩個任務通過一個端口地址發(fā)送和接收。對于多個并發(fā)的任務需要創(chuàng)建多個線程或線程去實現(xiàn)。使用一個進程去完成發(fā)送信息是沒有問題的,因為發(fā)送總是主動的;而使用同一個進程再去完成接受信息去不一定會成功,因為接受信息是被動的,所以當沒有信息可以接收時,該進程就會被阻塞,從而導致發(fā)送任務也一起被阻塞.同一個端口的發(fā)送和接收是兩個并發(fā)任務,應該由兩個不同的任務去分別完成信息的發(fā)送和接收。這樣,當接收信息任務因沒有信息而被阻塞時,不至于影響發(fā)送任務的執(zhí)行。那么,發(fā)送和接收兩個任務是使用兩個進程還是兩個進程去完成呢?在網絡通信中,端口地址是以進程為單位進程分配的,而一個進程與外界的消息發(fā)送與接收必須通過分配給它的同一個端口進行.因此,不能通過創(chuàng)建進程方式來解決上訴問題,因為兩個進程會分別對應兩個不同的端口,而發(fā)送和接收必須使用同一端口。線程不是資源分配的單位,所以如果使用兩個線程不會對線程分配新的端口。因此,本實驗需要使用兩個線程去分別完成發(fā)送和接收信息的任務,這兩個線程共享其進程擁有的統(tǒng)一個端口地址。由于創(chuàng)建進程的進程本身會作為一個線程來調度,所以只需要再創(chuàng)建一個線程專門負責接收信息就可以了。因此,對于從每個客戶端發(fā)來的請求,服務器端都要創(chuàng)建相應的線程去接收并處理;同理,對于客戶端而言,也要創(chuàng)建一個線程去讀取服務器端發(fā)來的信息。3系統(tǒng)實現(xiàn)3.1Linux提供的有關Socket的系統(tǒng)調用Socket()作用:socket函數(shù)為客戶機或服務器創(chuàng)建一個sokcet格式:intsocket(intfamily,inttype,intprotocol);參數(shù)說明:Family:表示地址族,可以去AF_UNLX和AF_INT。其中,AF_UNLX只能夠用于單一的UNIX系統(tǒng)進程間通信;AF_INT是針對Internet的,因而可以允許在遠程主機之間通信,實驗中使用AF_INT。Type:網絡程序所采用的通信協(xié)議,可以取SOCK_STREAM或SOCK_DGRAM.其中,SOCK_STREAM表明使用的是TCP協(xié)議,這樣提供按順序的、可靠的、雙向、面向連接的比特流;SOCKE_DGRAM表明使用的是UDP協(xié)議,這樣只會提供定長、不可靠、無連接的通信。bind()格式:intbind(intsockfd,structsockaddr*addr,intaddrlen);參數(shù)說明:Sockfd:socket的文件描述符號。Sockaddr:表示名字所用的一個數(shù)據(jù)結構,用來保存地址(包括IP地址和端口)Addrlen:設置結構大小長度。listen()格式:intlisten(intsockfd,intbacklog);作用:監(jiān)聽連接信號,和accepted函數(shù)合同。參數(shù)說明:Sockfd:表示socket調用返回的文件描述符。Backlog:表示接入隊列允許的連接數(shù)目,大多數(shù)系統(tǒng)允許20個,也可以子定義5~10個。accept()格式:Intaccept(intsockfd,void*addr,int*addrlen);作用:與listen函數(shù)合用,監(jiān)聽信息、接收客戶端請求。參數(shù)說明:Sockfd:表示socket的文件描述符。Addr:表示指向局部的數(shù)據(jù)結構structsockaddr-in的指針.Addrlen:表示地址的長度.connect()格式:intconnect(intsockfd,structsockaddr*serv_addr,intaddrlen);作用:在面向連接的系統(tǒng)中客戶及連接服務器時使用,connect必須在bind后使用。參數(shù)作用:Sockfd:表示socket的文件描述符。Serv-addr:表示村訪目的端口和ip地址(套接字)的數(shù)據(jù)結構。send()和recv()格式1:Intsend(intsockfd,constvod*msg,intlen,intflags);功能:發(fā)送信息。格式2:Intrecv(intsockfd,void*buf,intlen,usignedintflags);作用:用于流式socket、數(shù)據(jù)報socket內部之間的通信。close()和shutdown()格式:Close(intsockfd)或Intshutdown(intsockfd,inthow);參數(shù)說明:How的值為下面一種:0——--不允許繼續(xù)接收;1-—--不允許繼續(xù)發(fā)送;2---不允許繼續(xù)發(fā)送和接收。有關線程的系統(tǒng)調用函數(shù)pthread_create()、pthread_join()3.2實驗過程說明(使用TCP/IP)監(jiān)聽連接利用socket、bind、listen建立連接,步驟是:先用socket函數(shù)初始化socket,創(chuàng)建新的sockfd。Sockfd=socket(AF_INT,SOCK_STREAM,0)此步驟涉及到IP地址及其處理過程。參數(shù)說明:inet_addr函數(shù)INADDR_ANY該函數(shù)把由小數(shù)點分開的十進制IP地址轉為unsingedlong類型,而在實驗中所使用的為INADDR_ANY,使用利用自已的IP地址自動填充。利用bind函數(shù)綁定端口和IP地址。My_addr。sin_family=AF_INET;/*將地址族類型設定好*/My_addr。sin_port=htons(MYPORT;/*將端口給其賦值*/My_addr.sin_addr。s_addr=INADDR_ANY;/*用連接地址自動填充ip*/Bind(sockfd,(stuctsockaddr*)&my_addr,sizeof(stuctsockaddr));/*sockfd是分配的socket名字,my—addr則便是分配好的端口與IP,用bind綁定*/利用listen監(jiān)聽請求發(fā)送請求1)利用gethostbyname獲取主機信息。2)初始化socket端口。3)利用connect函數(shù)將自己的IP地址等信息發(fā)送到主機,等待主機調用accept函數(shù)來接受請求。主機接收請求,進行數(shù)據(jù)通信1)主機利用accept接收請求。2)創(chuàng)建子進程,顯示歡迎信息;3)接收返回信息,顯示連接成功,并推出連接;4)關閉客戶端口socket;5)關閉服務端socket,結束子線程.3.3TCP通信實現(xiàn)服務端源程序清單如下,設文件名為server.c#include<stdio.h>#include<stdlib.h>#include〈errno.h>#include<string.h〉#include〈sys/types。h〉#include<netinet/in。h〉#include<sys/socket。h〉#include<sys/wait.h〉#include<pthread.h〉#defineMYPORT3490#defineBACKLOG10#defineMAXDATASIZE1024intsockfd,new_fd;pthread_taccthread,recthread;voidrecmessage(void){while(1){intnumbytes;charbuf[MAXDATASIZE];if((numbytes=recv(new_fd,buf,MAXDATASIZE,0))==-1){perror("recv");exit(1);}buf[numbytes]='\0';if(strcmp(buf,”exit")==0){ printf(”Clientisclosed\n”); close(new_fd);?close(sockfd);?exit(1);}?printf(”Client:%s\n”,buf);}}voidacceptconnect(void){structsockaddr_intheir_addr;intsin_size;sin_size=sizeof(structsockaddr_in);if((new_fd=accept(sockfd,(structsockaddr*)&their_addr,&sin_size))==—1){perror("accept");exit(1);}printf("server:gotconnectionfrom%s\n",inet_ntoa(their_addr。sin_addr));if((pthread_create(&recthread,NULL,(void*)recmessage,NULL))!=0){printf("Createthreaderror!\r\n");exit(1);}}intmain(void){structsockaddr_inmy_addr;if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("socket”);exit(1);}my_addr.sin_family=AF_INET;my_addr。sin_port=htons(MYPORT);my_addr.sin_addr.s_addr=INADDR_ANY;bzero(&(my_addr.sin_zero),8);if(bind(sockfd,(structsockaddr*)&my_addr,sizeof(structsockaddr))==-1){perror("bind”);exit(1);}if(listen(sockfd,BACKLOG)==—1){perror(”listen”);exit(1);}if((pthread_create(&accthread,NULL,(void*)acceptconnect,NULL))!=0){printf("Createthreaderror!\r\n");exit(1);}while(1){charmsg[MAXDATASIZE];scanf("%s",msg);if(send(new_fd,msg,strlen(msg),0)==-1){perror("send”);close(new_fd);exit(1);}if(strcmp(msg,"exit")==0){printf("Byebye!\n");close(new_fd);close(sockfd);exit(1);}}return0;}客戶端源程序清單如下,設文件名為client.c#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<string.h>#include<netdb.h>#include〈sys/types.h>#include<netinet/in.h>#include〈sys/socket。h>#include<pthread.h>#definePORT3490#defineMAXDATASIZE1024intsockfd;pthread_trecthread;voidrecmessage(void){while(1){intnumbytes;charbuf[MAXDATASIZE];if((numbytes=recv(sockfd,buf,MAXDATASIZE,0))==—1){perror("recv");exit(1);}buf[numbytes]='\0’;if(strcmp(buf,”exit")==0){printf("Serverisclosed\n");close(sockfd);exit(1);}printf(”Server:%s\n",buf);}}intmain(intargc,char*argv[]){structhostent*he;structsockaddr_intheir_addr;if(argc!=2){fprintf(stderr,”usage:clienthostname\n");exit(1);}if((he=gethostbyname(argv[1]))==NULL){herror("gethostbyname”);exit(1);}if((sockfd=socket(AF_INET,SOCK_STREAM,0))==—1){perror(”socket");exit(1);}their_addr.sin_family=AF_INET;their_addr。sin_port=htons(PORT);their_addr.sin_addr=*((structin_addr*)he->h_addr);bzero(&(their_addr.sin_zero),8);if(connect(sockfd,(structsockaddr*)&their_addr,sizeof(structsockaddr))==-1){perror(”connect”);exit(1);}if((pthread_create(&recthread,NULL,(void*)recmessage,NULL))!=0){printf("Createthreaderror!\r\n");exit(1);}while(1){charmsg[MAXDATASIZE];scanf("%s",msg);if(send(sockfd,msg,strlen(msg),0)==—1){perror("send”);close(sockfd);exit(1);}if(strcmp(msg,"exit")==0){printf("Byebye!\n”);close(sockfd);exit(1);}}return0;}4運行效果程序測試環(huán)境:linux、unix、debian等操作系統(tǒng).測試軟件:putty、vmware虛擬機在編寫完TCP服務端程序server.c后,用gcc–lpthread–oserver。cserver生成程序server.在編寫完TCP客戶端程序client.c后,用gcc–lpthread–oclient。cclient生成程序client在主機上打開一窗口,運行server.再打開另一個窗口或者在另一個主機上打開一個窗口,運行client,輸入服務器的IP地址,并檢查器結果的正確性。輸入:【主】#。/server【從】#./client127。0.0.1?? (127。0.0.1為本機的ip地址)輸出:【主】#server:gotconnectionfrom127。0.0.1客戶端、服務器端窗口之間以及交錯發(fā)送信息的方式相互發(fā)送和接收信息??蛻舳恕⒎掌鞫舜敖酝ㄟ^鍵盤輸入消息內容平回車,以發(fā)送消息給對方;消息中若使用空格,則作為本條消息結束及下一條消息的開始;輸入exit則推出運行。開始運行后,服務器端窗口的執(zhí)行順序為:鍵入“Hello,world!”發(fā)送給客戶端接收客戶端發(fā)來的兩個消息;鍵入“OK!"發(fā)送個客戶端;輸入exit結束。服務器端運行結果如實驗圖4-1所示。圖4-1服務器端窗口開始運行后,客戶端窗口的執(zhí)行順序為:接收服務器端發(fā)來的消息“Hello,world!";發(fā)送消息“hello!“和”Good!”給服務器端;接收服務器發(fā)來的消息“OK!”;鍵入exit結束。客戶端運行結果如實驗圖4-2所示.圖4—2客戶端窗口上述運行結果表明,客戶端與服務器端之間傳遞的消息已被對方成功接收。結束語通過本次課程設計對Linux網絡聊天室的設計,確實積累和總結了不少的經驗,鍛煉了我的獨立工作和實際動手能力,加深了對計算機網絡中socket工作原理及其相互聯(lián)系的認識,提高了對復雜的綜合性實踐環(huán)節(jié)具有分析問題、解決問題、概括總結的實際工作能力,對網絡編程項目的開發(fā)、設計過程有初步認識.經過近了一個月的設計和開發(fā),網絡聊天室的設計設計完畢。其功能基本符合用戶需求,能夠簡單的網絡聊天功能。但是由于課程設計時間較短,還有許多不盡如人意的地方,還有待于我們進一步完善其功能。但我從中學到了不少的道理,真正的理解到,理論與實踐之間還是有很大的距離,這必將有利于我們以后的學習.使我明白,在以后的學習中,要不斷的完善自己的知識體系結構,注意理論與實踐的結合,學知識關鍵是要學活,而不能死記死搬書本上的知識,關鍵是要會靈活應用,這樣所學到的東西才真正的學以致用,才達到了學習的真正目的!在本次課題程序設計中,我學到了很多東西,通過本次課題程序設計,無論在理論上還是在實踐中,我的計算機應用水平得到了很大的提升,這對于今后的工作和學習都是一種巨大的財富。致謝經過幾個月的努力,準備資料,查證資料、整理資料、編寫論文,最后終于順利的完成論文?;厥鬃约呵髮W期間的點點滴滴,無數(shù)感慨涌上心頭。時光匆匆飛逝,三年多的努力與付出,隨著論文的完成,終于給自的成教生活劃下了句點.通過此次的論文的寫作,我學到了很多知識,跨越了傳統(tǒng)方式下的教與學的體制束縛,在論文的寫作過程中,通過查資料和搜集有關的文獻,培養(yǎng)了自學能力和動手能力。論文得以完成,離不開指導老師的悉心幫助,在此真誠的感謝老師的無私幫助和關懷??傊?,此次論文的寫作過程,我收獲了很多,即為成教三年劃上了一個完美的句號,也為將來的人生之路做好了一個很好的鋪墊。參考文獻趙敏哲。64位Linux操作系統(tǒng)與應用實例.北京:機械工業(yè)出版社,2001龐麗萍。操作系統(tǒng)原理(第三版)。武漢:華中科技大學出版社,2000張饒學.計算機下載系統(tǒng)教程(第2版)習題解答與實驗指導.北京:清華大學出版社,2000李勝利,龐麗萍.操作系統(tǒng)。武漢:華中科技大學出版社,2002李善萍,陳文智。邊學邊干-linux內核指導.杭州:浙江大學出版社,2002胡明慶,高巍,鐘梅。操作系統(tǒng)教程與實驗.北京:清華大學出版社,2007中北大學操作系統(tǒng)課程設計說明書
學院、系:軟件學院專業(yè):軟件工程學生姓名:申云如學號:1121011914設計題目:基于Linux的模擬文件系統(tǒng)的設計與實現(xiàn)起迄日期:2013年11月22日-2013年12月6日指導教師:李玉蓉
2013年12月6日需求分析本次是基于Linux的模擬文件系統(tǒng)的設計與實現(xiàn),其設計內容如下:1、設計一個10個用戶的文件系統(tǒng)。每個用戶最多可以保存10個文件,一次運行用戶可打開多個文件。2、程序采用二級文件目錄。(即設置主目錄(MFD)和用戶文件目錄(UFD))。另外,可打開文件設置指針。3、為了方便實現(xiàn),對文件的讀寫作了簡化。在執(zhí)行讀寫命令時,只需改讀寫指針。并不進行實際的讀寫操作。4、實現(xiàn)的基本功能主要包括:改變目錄(CD),創(chuàng)建目錄(MD),顯示目錄(DIR),刪除目錄(RD),打開全部文件(openall),打開單個文件(open),建立一個文件(create),刪除一個文件(delete),寫文件(write),讀文件(read),改文件的保護碼(change),退出(exit)等。要求:考慮特殊情況如:各個命令對全路徑和相對路徑的支持、目錄不存在時,給出錯誤信息、不能用cd進入文件、命令之中不能有空格(如exit,給出錯誤提示)、相對路徑的解析、路徑中的空格剔除、新建目錄或文件時的問題、重名問題、目錄或文件的名字長度限制、目錄或文件的名字中包含不合法字符(注意空格)、刪除目錄或文件時的問題、刪除不存在的文件或目錄給出錯誤提示、刪除目錄時目錄不為空(如果該目錄為空,則可刪除,否則給出是否做刪除提示,刪除操作將該目錄下的全部文件和子目錄都刪除)、進入到某個目錄下,卻要刪除本目錄或上級目錄、不能用delete刪除目錄、不能用RD刪除文件等都要考慮在內。用戶驗證和操作算法思想:用結構體structuser來對用戶信息進行存儲,利用userHead鏈表對用戶進行檢索和查找在線用戶,以便更好的實現(xiàn)用戶登錄的驗證.目錄操作算法思想:首先用結構體structldir存儲目錄信息,利用數(shù)組對目錄名以及目錄創(chuàng)建時間進行存儲,在每次創(chuàng)建目錄時,檢索目錄鏈表,進行添加鏈表;改變目錄,調用cd()來實現(xiàn)對目錄的改變,刪除文件時,依次檢索鏈表來實現(xiàn)對鏈表的刪除,并實施操作刪除文件系統(tǒng)的目錄;添加目錄時,用添加
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西省上饒市2024-2025學年高一上學期1月期末英語試題【含答案】
- 江蘇省常州市2024-2025學年高三(上)期末生物試卷(含解析)
- 青貯池施工方案
- 排澇水系改造施工方案
- 生物觀察池施工方案
- co2加氫制甲醇總反應
- 4年級數(shù)學手抄報內容
- 地平關環(huán)機理
- 青海墻面防水施工方案
- 2025年廣西農業(yè)職業(yè)技術大學單招職業(yè)技能測試題庫匯編
- 2025口腔科年度工作計劃
- 商業(yè)辦公樓網絡改造施工方案
- 2024年中國主題公園競爭力評價報告-中國主題公園研究院
- 2023年湖北省生態(tài)環(huán)保有限公司招聘考試真題
- 化療藥物外滲的預防及處理-2
- DB35T 1933-2020 熔融沉積3D打印品幾何精度評價規(guī)范
- 《大氣污染物控制工程》-揮發(fā)性有機物污染控制
- 2024-2030年冷凍面團產品行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- LED基礎知識題庫100道及答案(完整版)
- 新版高中物理必做實驗目錄及器材-(電子版)
- 涉密項目保密工作方案
評論
0/150
提交評論