




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
操作系統(tǒng)課程設(shè)計(jì)說明書在Linux環(huán)境下模擬實(shí)現(xiàn)命令解釋器學(xué)院:計(jì)算機(jī)工程學(xué)院專業(yè)班級(jí):11軟件工程1班姓名:黃少杰學(xué)號(hào):201130098062班內(nèi)序號(hào):24程序概述本程序是內(nèi)核為:Kernel2.6.9-42.ELsmponani686的Linux環(huán)境下運(yùn)行,是一個(gè)基于linux系統(tǒng)下的實(shí)現(xiàn)的命令解釋器。以下為源程序在效勞器上執(zhí)行的步驟:Linux效勞器地址為:telnet10,5,1,6用戶名:11124密碼:123456①進(jìn)入linux效勞器②進(jìn)入源程序所在目錄,代碼為:cdhuangshaojie③運(yùn)行源程序,代碼:./a.out這個(gè)huangshaojie目錄為本次操作系統(tǒng)課程設(shè)計(jì)的目錄ls顯示huangshaojie下的文件:hsj2.cpp為本次課程設(shè)計(jì)的源文件,采用語言為C++。執(zhí)行命令g++hsj2.cpp,產(chǎn)生可執(zhí)行文件:a.out在命令行鍵入:./a.out就可以直接運(yùn)行程序功能列表本次課程設(shè)計(jì)在Linux環(huán)境下模擬實(shí)現(xiàn)命令解釋器:本人實(shí)現(xiàn)的功能如下:1.使用pwd命令,實(shí)現(xiàn)查看目錄所處路徑的功能。2.使用dir命令,實(shí)現(xiàn)顯示列出指定目錄名中的所有目錄及文件的功能。3.使用cd命令,實(shí)現(xiàn)改變工作目錄的功能。4.使用newdir命令,實(shí)現(xiàn)創(chuàng)立新的目錄的功能。5.使用deldir命令,實(shí)現(xiàn)刪除目錄的功能。6.使用rename命令,實(shí)現(xiàn)重命名一個(gè)文件或目錄的功能。7.使用find命令,實(shí)現(xiàn)查找指定目錄下及其子目錄的指定文件。8.使用date命令,實(shí)現(xiàn)顯示當(dāng)前日期。9.使用exit命令,實(shí)現(xiàn)退出命令行模式。概念原理本次操作系統(tǒng)課程設(shè)計(jì)使用的語言為C++,包含的頭文件大多是Linux下c的函數(shù)庫。通過調(diào)用相關(guān)的函數(shù)庫來實(shí)現(xiàn)模擬shell命令操作。下面是對(duì)一些概念原理的說明:1.源程序包含的頭文件#include<iostream>//主要用于一些標(biāo)準(zhǔn)輸入輸出:cin,cout操作#include<cstring>//標(biāo)準(zhǔn)C++函數(shù)庫,主要用于字符串處理#include<sys/types.h>//根本系統(tǒng)數(shù)據(jù)類型#include<sys/stat.h>//文件狀態(tài)#include<dirent.h>//文件操作函數(shù)#include<fcntl.h>//文件控制#include<time.h>//定義關(guān)于時(shí)間的函數(shù)以上是整個(gè)源程序涉及到的一些函數(shù)頭文件2.函數(shù)概念說明以下是對(duì)程序調(diào)用Linuxc函數(shù)庫的方法說明:調(diào)用getcwd()函數(shù)函數(shù)原型:char*getcwd(char*buf,size_tsize);函數(shù)說明:getcwd()會(huì)將當(dāng)前的工作目錄絕對(duì)路徑復(fù)制到參數(shù)buf所指的內(nèi)存空間,參數(shù)size為buf的空間大小。在調(diào)用此函數(shù)時(shí),buf所指的內(nèi)存空間要足夠大,假設(shè)工作目錄絕對(duì)路徑的字符串長度超過參數(shù)size大小,那么回值NULL,errno的值那么為ERANGE。倘假設(shè)參數(shù)buf為NULL,getcwd()會(huì)依參數(shù)size的大小自動(dòng)配置內(nèi)存(使用malloc()),如果參數(shù)size也為0,那么getcwd()會(huì)依工作目錄絕對(duì)路徑的字符串程度來決定所配置的內(nèi)存大小,進(jìn)程可以在使用完此字符串后利用free()來釋放此空間。返回值:執(zhí)行成功那么將結(jié)果復(fù)制到參數(shù)buf所指的內(nèi)存空間,或是返回自動(dòng)配置的字符串指針。失敗返回NULL,錯(cuò)誤代碼存于errno。調(diào)用opendir()函數(shù)函數(shù)原型:DIR*opendir(constchar*name);函數(shù)說明:opendir()用來翻開參數(shù)name指定的目錄,并返回DIR*形態(tài)的目錄流,和open()類似,接下來對(duì)目錄的讀取和搜索都要使用此返回值。返回值:成功那么返回DIR*型態(tài)的目錄流,翻開失敗那么返回NULL。調(diào)用readdir()函數(shù)函數(shù)原型:structdirent*readdir(DIR*dir);函數(shù)說明:readdir()返回參數(shù)dir目錄流的下個(gè)目錄進(jìn)入點(diǎn)。結(jié)構(gòu)dirent定義如下
structdirent
{
ino_td_ino;
ff_td_off;
signedshortintd_reclen;
unsignedchard_type;
hard_name[256;
};
d_ino此目錄進(jìn)入點(diǎn)的inode
d_off目錄文件開頭至此目錄進(jìn)入點(diǎn)的位移
d_reclen_name的長度,不包含NULL字符
d_typed_name所指的文件類型
d_name文件名返回值:成功那么返回下個(gè)目錄進(jìn)入點(diǎn)。有錯(cuò)誤發(fā)生或讀取到目錄文件尾那么返回NULL。調(diào)用closedir()函數(shù)函數(shù)原型:intclosedir(DIR*dir);函數(shù)說明:closedir()關(guān)閉參數(shù)dir所指的目錄流。返回值:關(guān)閉成功那么返回0,失敗返回-1,錯(cuò)誤原因存于errno中。
調(diào)用chdir()函數(shù)函數(shù)原型:intchdir(constchar*path);函數(shù)說明:chdir()用來將當(dāng)前的工作目錄改變成以參數(shù)path所指的目錄。返回值:執(zhí)行成功返回0,失敗返回-1;
調(diào)用mkdir()函數(shù)函數(shù)原型:intmkdir(constchar*pathname,mode_tmode);函數(shù)說明:mkdir()函數(shù)以mode方式創(chuàng)立一個(gè)以參數(shù)pathname命名的目錄,mode定義新創(chuàng)立目錄的權(quán)限。返回值:假設(shè)目錄創(chuàng)立成功,那么返回0,否那么返回-1;
調(diào)用rmdir()函數(shù)函數(shù)原型:int_rmdir(constchar*dirname);函數(shù)說明:rmdir〔〕函數(shù)刪除以參數(shù)dirname為命名的目錄。返回值:假設(shè)目錄刪除成功,那么返回0,否那么返回-1;
調(diào)用rename()函數(shù)函數(shù)原型:intrename(constchar*oldpath,constchar*newpath);函數(shù)說明:rename()會(huì)將參數(shù)oldpath所指定的文件名稱改為參數(shù)newpath所指的文件名稱。假設(shè)newpath所指定的文件已存在,那么會(huì)被刪除。返回值:執(zhí)行成功那么返回0,失敗返回-1。
3.完成情況完成了整個(gè)操作系統(tǒng)課程設(shè)計(jì)的命令行功能根本要求:pwd//顯示當(dāng)前所在目錄的路徑名dir<目錄名>//列出指定目錄名中的所有目錄及文件cd<目錄名或路徑>
//改變當(dāng)前工作目錄newdir<目錄名>//新建目錄deldir<目錄名>
//刪除目錄exit
//退出命令解釋程序其中直接輸入dir不能直接顯示文件和目錄,需要在使用dir.,才能顯示當(dāng)前文件夾下的目錄和文件根本完成了以下幾個(gè)擴(kuò)展命令的動(dòng)能要求:rename<舊文件名><新文件名>
//重命名一個(gè)文件或目錄find<目錄>-name<待查找的文件名>
//在指定的目錄及其子目錄中查找指定的文件date//顯示當(dāng)前日期其中find命令,只能查詢指定目錄的文件,不能指定待查找的文件名。通過測(cè)試,以上所有命令都運(yùn)行正常。整個(gè)程序,代碼實(shí)現(xiàn)簡單清晰,沒有太復(fù)雜的算法。根本上就是對(duì)函數(shù)的調(diào)用實(shí)現(xiàn)。運(yùn)行結(jié)果又較好的提示信息,無論是成功錯(cuò)誤都提示相應(yīng)的信息。源代碼的注釋內(nèi)容也非常清晰,方便查看理解函數(shù)調(diào)用的功能。詳細(xì)設(shè)計(jì)下面是對(duì)整個(gè)程序功能實(shí)現(xiàn)的介紹:1.pwd()函數(shù)主要調(diào)用了getcwd()函數(shù),獲取當(dāng)前工作目錄的絕對(duì)路徑。相關(guān)代碼:charptr[80];getcwd(ptr,sizeof(ptr));getcwd函數(shù)會(huì)將當(dāng)前的工作目錄絕對(duì)路徑復(fù)制到參數(shù)buf所指的內(nèi)存空間,所以直接輸出ptr就可以得到當(dāng)前目錄的絕對(duì)路徑。2.dir()函數(shù)dir()函數(shù)主要實(shí)現(xiàn)顯示指定目錄下的目錄和文件調(diào)用了opendir()、readdir()、closedir()等對(duì)文件權(quán)限操作的函數(shù)。下面是主要代碼,輸出目錄dir=opendir(dirname);while((ptr=readdir(dir))!=NULL){//如果d_name為"."或"..",不做任何事if(strcmp(ptr->d_name,".")==0||strcmp(ptr->d_name,"..")==0){}elsecout<<ptr->d_name<<"";count++;if(count%8==0)cout<<endl;}closedir(dir);詳細(xì)設(shè)計(jì)說明:①.通過目錄名dirname,調(diào)用opendir()函數(shù)翻開目錄流②.調(diào)用readdir()函數(shù)讀取目錄,返回dirent*數(shù)據(jù)結(jié)構(gòu)③.將d_name〔目錄名/文件名〕輸出④.有開的過程,就應(yīng)該有關(guān)的過程,調(diào)用closedir()函數(shù)關(guān)閉目錄流。3.cd()函數(shù)cd函數(shù)主要實(shí)現(xiàn)切換目錄的功能。詳細(xì)設(shè)計(jì)如下:調(diào)用chdir()函數(shù)切換目錄,如果切換成功就返回0,切換失敗返回-1;4.newdir()函數(shù)newdir函數(shù)主要實(shí)現(xiàn),新建目錄的功能。詳細(xì)設(shè)計(jì)如下:調(diào)用mkdir()函數(shù)就可以創(chuàng)立新的目錄,如果創(chuàng)立成功返回0,創(chuàng)立失敗返回-1;實(shí)現(xiàn)代碼如下:if(mkdir(filename,0777)==0){cout<<filename<<"indecatessuccessful!!!"<<endl;}else{cout<<filename<<"indecatesfailure!!!"<<endl;}其中0777設(shè)置文件為最大權(quán)限5.deldir()函數(shù)deldir函數(shù)主要實(shí)現(xiàn)了刪除目錄的功能。詳細(xì)設(shè)計(jì)如下:調(diào)用rmdir()函數(shù)就可以將指定目錄刪除,如果創(chuàng)立成功返回0,創(chuàng)立失敗返回-1;實(shí)現(xiàn)代碼與newdir()函數(shù)類似。6.rename()函數(shù)rename函數(shù)主要實(shí)現(xiàn)了對(duì)文件進(jìn)行重命名的功能。詳細(xì)設(shè)計(jì)如下:調(diào)用rename(filename1,filename2);就可以將filename1更改為filename2,如果更改成功的話,返回0,否那么返回-1;7.find()函數(shù)find函數(shù)主要實(shí)現(xiàn)了查找指定目錄的文件,并列出每一個(gè)文件的類型,這里指列出來了目錄和文件類型。find函數(shù)調(diào)用了ftw庫函數(shù),8.date()函數(shù)date函數(shù)實(shí)現(xiàn)的功能是顯示當(dāng)前日期,主要是調(diào)用ctime()函數(shù)返回一個(gè)關(guān)于日期的字符串。直接將這個(gè)字符串輸出,就可以知道當(dāng)前日期和時(shí)間。詳細(xì)設(shè)計(jì)說明:voiddate(){time_ttimeval;(void)time(&timeval);stringtimestr;//調(diào)用ctime函數(shù)并返回字符串timestr=ctime(&timeval);cout<<"當(dāng)前時(shí)間是:"<<timestr<<endl;}調(diào)用ftw()函數(shù)表頭文件:#include<ftw.h>
函數(shù)原型:intftw(constchar*dir,int(*fn)(const*file,conststructstat*sb,intflag),intdepth)
函數(shù)說明:ftw()
會(huì)從參數(shù)dir指定的
目錄開始,往下一層層地遞歸式遍歷子
目錄。ftw()會(huì)傳三個(gè)參數(shù)給fn(),
第一個(gè)參數(shù)*file指向當(dāng)時(shí)所在的
目錄路徑,第二個(gè)參數(shù)是*sb,
為stat結(jié)構(gòu)指針,第三個(gè)參數(shù)為旗標(biāo),有下面幾種可能值:
FTW_F
一般文件
FTW_D
目錄
FTW_DNR
不可讀取的
目錄,此
目錄以下將不被遍歷
FTW_SL
符號(hào)連接
FTW_NS
無法取得stat結(jié)構(gòu)數(shù)據(jù),有可能是
權(quán)限問題
最后一個(gè)參數(shù)depth代表ftw〔〕在進(jìn)行遍歷
目錄時(shí)同時(shí)翻開的文件數(shù)。ftw()在遍歷時(shí)每一層
目錄至少需要一個(gè)文件描述詞,如果遍歷時(shí)用完了depth所給予的限制數(shù)目,整個(gè)遍歷將因不斷地關(guān)文件和開文件操作而顯得緩慢.
如果要結(jié)束ftw()的遍歷,fn()只需返回一非零值即可,此值同時(shí)也會(huì)是ftw()的返回值。否那么ftw()會(huì)試著走完所有的
目錄,然后返回0.
返回值:遍歷中斷那么返回fn()函數(shù)的返回值,全部遍歷那么返回0,假設(shè)有錯(cuò)誤發(fā)生那么返回-1使用情況使用./a.out運(yùn)行程序會(huì)顯示以上9條命令使用提示,并指令提示符為[姓名@]$使用pwd命令----顯示當(dāng)前目錄的絕對(duì)路徑使用dir命令顯示指定目錄的文件和目錄使用cd命令更換目錄使用newdir命令新建目錄使用deldir命令刪除目錄使用rename命令重命名目錄使用find命令查找指定目錄的文件使用date命令顯示當(dāng)前日期和時(shí)間使用exit命令退出命令行設(shè)計(jì)總結(jié)1.遇到的困難及解決的問題遇到的困難是不理解Linuxc函數(shù)庫的調(diào)用,所以不知道從何編寫代碼實(shí)現(xiàn)功能。后來查找相關(guān)函數(shù)說明和使用方法,花時(shí)間去理解每一個(gè)函數(shù)的作用和相關(guān)參數(shù)的作用,然后通過一步一步實(shí)現(xiàn)每個(gè)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公路項(xiàng)目人員聘請(qǐng)合同范本
- 農(nóng)村房屋安裝維修合同范本
- 公司員工勞動(dòng)合同范本
- 北京企業(yè)住房合同范本
- 產(chǎn)品交付標(biāo)準(zhǔn)合同范本
- 公司擔(dān)保合同范本6
- 綜合實(shí)踐項(xiàng)目《制作細(xì)胞模型》教學(xué)設(shè)計(jì)-2024-2025學(xué)年魯科版生物六年級(jí)上冊(cè)
- 2人合伙合同范本
- 修路混凝土合同范本
- 產(chǎn)品加工定制合同范本
- 運(yùn)輸車輛衛(wèi)生安全檢查記錄表
- 民航概論P(yáng)PT全套教學(xué)課件
- 過敏性肺泡炎課件
- 客運(yùn)車輛進(jìn)站協(xié)議書
- 藥學(xué)專業(yè)論文3000字-藥學(xué)畢業(yè)論文
- 2022-2023學(xué)年遼寧省葫蘆島市建昌縣數(shù)學(xué)四下期末經(jīng)典試題含解析
- 山東工商學(xué)院馬克思主義基本原理期末復(fù)習(xí)題及參考答案
- 2022-2023學(xué)年杭州市六年級(jí)下學(xué)期數(shù)學(xué)期末考試試卷及答案解析
- 文獻(xiàn)檢索與論文寫作-文獻(xiàn)檢索與科技論文寫作138課件
- 公務(wù)員錄用審批表
- 重慶市住宅裝飾裝修工程質(zhì)量驗(yàn)收標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論