課程設(shè)計報告系統(tǒng)軟件實(shí)踐_第1頁
課程設(shè)計報告系統(tǒng)軟件實(shí)踐_第2頁
課程設(shè)計報告系統(tǒng)軟件實(shí)踐_第3頁
課程設(shè)計報告系統(tǒng)軟件實(shí)踐_第4頁
課程設(shè)計報告系統(tǒng)軟件實(shí)踐_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、北京化工大學(xué)北方學(xué)院課程設(shè)計報告課程名稱 系統(tǒng)軟件實(shí)踐 設(shè)計題目 Linux C 程序設(shè)計 專業(yè)、班級 軟件1004 學(xué) 號 100220119 姓 名 張雄飛 指導(dǎo)教師 馬睿 設(shè)計時間 2013年10月8日-2013年10月27日 2013年 10月 27 日 一、 引言(簡要說明設(shè)計題目的目的、意義、內(nèi)容、主要任務(wù)等)1.1設(shè)計目的本次系統(tǒng)軟件課程設(shè)計的主要目的有兩個:一方面是分析設(shè)計linux源代碼,另一方面是進(jìn)行系統(tǒng)級的程序設(shè)計。1.2 主要任務(wù)(1)編寫程序,輸入一個十進(jìn)制整數(shù),將其變換為二進(jìn)制后存儲在一個數(shù)組中。并用make工程管理器編譯。(注意分割文件,可參考第一題的提示。)編寫

2、makefile文件。(2)設(shè)計一個程序,要求利用read函數(shù)讀取系統(tǒng)文件“/etc/passwd”,并在終端中顯示輸出。(3)設(shè)計一個程序,要求復(fù)制進(jìn)程,子進(jìn)程顯示自己的進(jìn)程號(PID)后暫停一段時間,父進(jìn)程等待子進(jìn)程正常結(jié)束,打印顯示等待的進(jìn)程號(PID)和等待的進(jìn)程退出狀態(tài)。(4)設(shè)計一個程序,要求創(chuàng)建一個管道,復(fù)制進(jìn)程,父進(jìn)程往管道中寫入字符串,子進(jìn)程從管道中讀取并輸出字符串。1.3題目設(shè)計意義通過本課題的畢業(yè)設(shè)計,熟悉了關(guān)于linux下C語言的系統(tǒng)軟件程序設(shè)計,可以比較深入的了解和掌握基本gcc,vim等編程軟件的使用和對makefile文件的使用。掌握進(jìn)程間的通信方式,進(jìn)程控制,文

3、件操作的方式。本報告就系統(tǒng)的開發(fā)過程做了詳細(xì)的介紹,并對系統(tǒng)的原理、總體設(shè)計等方面做了深入細(xì)致的討論。二、 正文(課程設(shè)計的主要內(nèi)容,包括實(shí)驗(yàn)與觀測方法和結(jié)果、儀器設(shè)備、計算方法、編程原理、數(shù)據(jù)處理、設(shè)計說明與依據(jù)、加工整理和圖表、形成的論點(diǎn)和導(dǎo)出的結(jié)論等。正文內(nèi)容必須實(shí)事求是、客觀真切、準(zhǔn)確完備、合乎邏輯、層次分明、語言流暢、結(jié)構(gòu)嚴(yán)謹(jǐn),符合各學(xué)科、專業(yè)的有關(guān)要求。)任務(wù)一:十進(jìn)制和二進(jìn)制的轉(zhuǎn)換 2.1、主要內(nèi)容2.1.1本程序夠分為兩個模塊:轉(zhuǎn)換模塊和數(shù)字輸入模塊;下面分別對這兩個模塊的算法做一下介紹。(1)轉(zhuǎn)換模塊:利用十進(jìn)制轉(zhuǎn)換二進(jìn)制規(guī)則,也就是將輸入的十進(jìn)制數(shù)字除二取余。直到商為零為止

4、。然后倒序輸出余數(shù)。(2)數(shù)字輸入模塊:利用scanf函數(shù)輸入一個整數(shù),然后傳遞給轉(zhuǎn)換函數(shù)。以上為程序的模塊說明。1.1.2程序結(jié)構(gòu)及主要過程(1)此成熟包含了循環(huán)結(jié)構(gòu),順序結(jié)構(gòu)等在c語言中的主要結(jié)構(gòu)。其中穿插著函數(shù)調(diào)用,數(shù)組等linux c語言的大部分知識。(2)本程序結(jié)構(gòu)和過程思路如下:由main函數(shù)接受一個十進(jìn)制的整數(shù)(正整數(shù),負(fù)整數(shù)都可),再由轉(zhuǎn)換函數(shù)進(jìn)行轉(zhuǎn)換和輸出對應(yīng)的二進(jìn)制。1.1.3makefile介紹Makefile文件介紹Makefile一個工程中的源文件不計數(shù),其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規(guī)則來指定,哪些文件需要先編譯,哪些文件需

5、要后編譯,哪些文件需要重新編譯,甚至于進(jìn)行更復(fù)雜的功能操作,因?yàn)?makefile就像一個Shell腳本一樣,其中也可以執(zhí)行操作系統(tǒng)的命令。makefile主要功能Make工具最主要也是最基本的功能就是通過makefile文件來描述源程序之間的相互關(guān)系并自動維護(hù)編譯工作。而makefile 文件需要按照某種語法進(jìn)行編寫,文件中需要說明如何編譯各個源文件并連接生成可執(zhí)行文件,并要求定義源文件之間的依賴關(guān)系。makefile 文件是許多編譯器-包括 Windows NT 下的編譯器-維護(hù)編譯信息的常用方法,只是在集成開發(fā)環(huán)境中,用戶通過友好的界面修改 makefile 文件而已。自動化編譯Make

6、file帶來的好處就是“自動化編譯”,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟件開發(fā)的效率。make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數(shù)的IDE都有這個命令,可見,makefile都成為了一種在工程方面的編譯方法。2.1.4 makefile規(guī)則makefile中的規(guī)則是這樣的:TARGET : DEPENDENCIES COMMAND目標(biāo)(TARGET)程序產(chǎn)生的文件,如可執(zhí)行文件和目標(biāo)文件;目標(biāo)也可以是要執(zhí)行的動作,如“clean”。依賴(DEPENDENCIES)是用來產(chǎn)生目標(biāo)的輸入文件,一個目標(biāo)通常依賴于多個文件。命

7、令(COMMAND)是make執(zhí)行的動作,一個可以有多個命令,每個占一行。注意:每個命令行的起始字符必須為TAB字符!有依賴關(guān)系規(guī)則中的命令通常在依賴文件變化時負(fù)責(zé)產(chǎn)生target文件,make執(zhí)行這些命令更新或產(chǎn)生target。規(guī)則可以沒有依賴關(guān)系,如包含target “clean”的規(guī)則。規(guī)則解釋如何和何時重做該規(guī)則中的文件,make根據(jù)依賴關(guān)系執(zhí)行產(chǎn)生或更新目標(biāo);規(guī)則也說明如何和何時執(zhí)行動作。有的規(guī)則看起來很復(fù)雜,但都符合上述模式。makefile中的規(guī)則描述如何生成特定的文件,即規(guī)則的目標(biāo)。規(guī)則列出了目標(biāo)的依賴文件,指定生成或更新目標(biāo)的命令。規(guī)則的次序是不重要的,除非是確定缺省目標(biāo):缺

8、省目標(biāo)是第一個makefile中的第一個規(guī)則;如果第一個規(guī)則有多個目標(biāo),第一個目標(biāo)是缺省的。有兩個例外:以.開頭的目標(biāo)不是缺省目標(biāo);模式規(guī)則對缺省目標(biāo)沒有影響。通常我們所寫的地一個規(guī)則是編譯整個或makefile中指定的所有程序。2.1.5 Makefile文件main:main.o zhuanhuan.ogcc -o main main.o zhuanhuan.omain.o:main.cgcc -c main.czhuanhuan.o:zhuanhuan.cgcc -c zhuanhuan.cecho:echo this is a zhuanhuanclear:rm main mian.o

9、 zhuanhuan.o2.1.6 源程序#include<stdio.h>int main() int i; printf("清輸入一個十進(jìn)制數(shù)字:"); scanf("%d",&i); zhuanhuan(i); return 0;#include<stdio.h>int zhuanhuan(int i) int k,l; int a30;for(l=0;l<30;l+)al=0;if(i>0)int b=0; dok=i%2; i=i/2; ab+=k; while(i!=0);for(l=b;l>

10、=0;l-) printf("%d",al);elseint b=0;i=-i;dok=i%2; i=i/2; ab+=k; while(i!=0);ab+1=1; for(l=b+1;l>=0;l-) printf("%d",al);return 0;2.1.7 試驗(yàn)過程及結(jié)果(1)運(yùn)行make:(2)輸入十進(jìn)制62.1.8結(jié)果分析 這是一個十進(jìn)制轉(zhuǎn)換二進(jìn)制程序,能根據(jù)用戶輸入的十進(jìn)制轉(zhuǎn)換為對應(yīng)的二進(jìn)制數(shù)字。經(jīng)過測試本程序能夠?qū)崿F(xiàn)以上功能。任務(wù)二:使用read函數(shù)讀取系統(tǒng)文件 2.2、主要內(nèi)容2.2.1本程序只有一個模塊,下面分別對這個模塊的算法

11、做一下介紹。在main函數(shù)里面利用read函數(shù)讀取系統(tǒng)文件“/etc/passwd”,并在終端中顯示輸出。2.2.2 程序結(jié)構(gòu)及主要過程本程序共包含了順序結(jié)構(gòu)這種在 C 程序中的主要結(jié)構(gòu),指針、函數(shù)調(diào)用等知識,該程序覆蓋了linux c語言所學(xué)的除結(jié)構(gòu)體外的大部分知識。本程序結(jié)構(gòu)和過程思路如下:在main函數(shù)里面利用read函數(shù)讀取系統(tǒng)文件“/etc/passwd”,并在終端中顯示輸出。2.2.3程序源代碼#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.

12、h>#include<stdio.h>int main()int fd,size;char buffer80;fd=open("./etc/passwd",O_RDONLY);size=read(fd,buffer,sizeof(buffer);close(fd);printf("%s",buffer);return 0;2.2.4運(yùn)行結(jié)果2.2.5結(jié)果分析這是一個利用read函數(shù)讀取系統(tǒng)文件的程序,要求完成讀取和顯示“/etc/passwd”。(因?yàn)樽x取的是密碼文件所以會出現(xiàn)加密亂碼情況?。┙?jīng)測試該程序基本實(shí)現(xiàn)了以上功能,且計算結(jié)果合

13、理正確,滿足實(shí)驗(yàn)要求。任務(wù)三:進(jìn)程控制 2.3.1主要內(nèi)容設(shè)計一個程序,要求復(fù)制進(jìn)程,子進(jìn)程顯示自己的進(jìn)程號(PID)后暫停一段時間,父進(jìn)程等待子進(jìn)程正常結(jié)束,打印顯示等待的進(jìn)程號(PID)和等待的進(jìn)程退出狀態(tài)。2.3.2 程序結(jié)構(gòu)及主要過程(1)本程序運(yùn)用了順序結(jié)構(gòu),選擇結(jié)構(gòu)等c語言主要結(jié)構(gòu),指針、函數(shù)調(diào)用等知識,該程序覆蓋了linux c語言所學(xué)的除結(jié)構(gòu)體外的大部分知識。(2)本程序結(jié)構(gòu)和過程思路如下:利用fork函數(shù)復(fù)制進(jìn)程,再利用getpid函數(shù)獲取子進(jìn)程的進(jìn)程號,同時也利用了wait函數(shù)來等待進(jìn)程。2.3.3程序源碼#include<stdio.h>#include<

14、;unistd.h>#include<sys/types>#include<sys/wait.h>int main()pid_t pid,vpid;int status,i;pid=fork();if(pid=0)printf("子進(jìn)程pid:%dn",getpid();sleep(2);exit(3);elsevpid=wait(&status);i=WEXITSTATUS(status); printf("父進(jìn)程pid:%d,退出狀態(tài)%dn",vpid,i);2.3.4 試驗(yàn)過程及結(jié)果abclocalhost $

15、 gcc 4.cabclocalhost $ ./a.out子進(jìn)程pid:3047父進(jìn)程vpid:3047,退出狀態(tài)3abclocalhost $2.3.5 結(jié)果分析這是一個進(jìn)程控制程序,要求完成復(fù)制進(jìn)程,子進(jìn)程顯示自己的進(jìn)程號(PID)后暫停一段時間,父進(jìn)程等待子進(jìn)程正常結(jié)束,打印顯示等待的進(jìn)程號(PID)和等待的進(jìn)程退出狀態(tài)。 經(jīng)過測試,該程序基本實(shí)現(xiàn)了以上功能,且計算結(jié)果合理正確,滿足實(shí)驗(yàn)要求。任務(wù)四:進(jìn)程間通信2.4主要內(nèi)容2.4.1程序要求設(shè)計一個程序,要求創(chuàng)建一個管道,復(fù)制進(jìn)程,父進(jìn)程往管道中寫入字符串,子進(jìn)程從管道中讀取并輸出字符串。4.4.2程序結(jié)構(gòu)及主要過程(1)本程序運(yùn)用了

16、順序結(jié)構(gòu),選擇結(jié)構(gòu)等c語言主要結(jié)構(gòu),指針、函數(shù)調(diào)用等知識,該程序覆蓋了linux c語言所學(xué)的除結(jié)構(gòu)體外的大部分知識。(2)本程序結(jié)構(gòu)和過程思路如下:程序源碼#include<sys/types.h>#include<unistd.h>#include<stdio.h>Int main(void)Int n,fd2;Pid_t pid;Char line80;If(pipe(fd)<0)Printf(“pepe errorn”);Exit(1);Pid=fork();If(pid<0)Printf(“fork errorn”);Exit(1);E

17、lse if(pid=0)close(fd1);If(n=read(fd0,line,80)>0)Printf(“子進(jìn)程從管道讀取%d個字符,讀取字符串是:%sn”,n,line);Close(fd0);ElseClose(fd0);If(write(fd1,”hello!”,6)!=-1)Printf(“父進(jìn)程向管道寫入“hello!”n”);Close(fd1);Waitpid(pid,NULL,0);exit (0);2.4.4運(yùn)行結(jié)果abclocalhost $ gcc 4.cabclocalhost $ ./a.out父進(jìn)程向管道寫入hello!子進(jìn)程從管道讀取6個字符,讀取字

18、符串是:hello!abclocalhost $2.4.5結(jié)果分析這是一個進(jìn)程控制程序,要求創(chuàng)建一個管道,復(fù)制進(jìn)程,父進(jìn)程往管道中寫入字符串,子進(jìn)程從管道中讀取并輸出字符串。 經(jīng)過測試,該程序基本實(shí)現(xiàn)了以上功能,且計算結(jié)果合理正確,滿足實(shí)驗(yàn)要求。三、 結(jié)論(應(yīng)當(dāng)準(zhǔn)確、完整、明確精練;也可以在結(jié)論或討論中提出建議、設(shè)想、尚待解決問題等。)3.1設(shè)計過程中的感受與體會為了增強(qiáng)我們的C程序的實(shí)際操作與設(shè)計能力我編寫了這個答題系統(tǒng),下面就來談下我在這次程序設(shè)計過程中的感受與體會。從程序的整體構(gòu)思到程序的算法設(shè)計及程序的編寫再到最后程序的調(diào)試,我經(jīng)歷了重重困難和考驗(yàn),但是我并沒有放棄,我運(yùn)用本學(xué)期所學(xué)到的知識和課外的一些知識,從想到查再到問,最后完成了該系統(tǒng)。在設(shè)計過程中,我不僅僅是完成了若干個系統(tǒng),更重要的是我在這次設(shè)計中鞏固了linux c所學(xué)到的知識,鍛煉了自己的實(shí)踐能力;另外在這次設(shè)計的過程中,我懂得了在設(shè)計遇到困難的時候怎樣去解決這個困難。從書上網(wǎng)上查閱資料,向比我們知識豐富的人虛心請教,這是我們解決問題的主要方法,這樣也同時擴(kuò)寬了我們的知識面,打破了課堂的局限,在以后的人生道路中,我們也應(yīng)該保持住這種精神。只要這樣我們相信今后我們的人生道路會像這次程序設(shè)計一樣取得成功。以上就是我

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論