版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
操作系統(tǒng)課程設(shè)計說明書在Linux環(huán)境下模擬實現(xiàn)命令解釋器年級:08級專業(yè)班級:08級軟件工程1班姓名:宋金驥學(xué)號:200830912071班內(nèi)序號:46程序概述你的源程序及可執(zhí)行程序保存在效勞器上的路徑〔此項不寫清楚的必定要參加辯論〕當(dāng)輸入./a.out的時候源程序的執(zhí)行結(jié)果就顯示如上圖,這時候已經(jīng)進(jìn)入了該程序,輸入命令“pwd”系統(tǒng)那么顯示出源程序保存在效勞器上的路徑為:/home/08446顯然可知可執(zhí)行程序也與源程序保存的路徑一樣。完成的功能本程序在不使用system〔〕系統(tǒng)調(diào)用的前提下實現(xiàn)了某些Linux環(huán)境下的系統(tǒng)自帶功能,如:pwd命令是顯示當(dāng)前所在目錄的路徑名。輸入格式:pwddir命令是列出指定目錄名中的所有目錄及文件。輸入格式:dircd命令是改變當(dāng)前工作目錄。輸入格式:cd<目錄名或路徑>newdir命令是新建所輸入的目錄。輸入格式:new<目錄名>deldir命令是刪除所輸入的目錄。輸入格式:deldir<目錄名>exit命令是退出命令解釋程序輸入格式:exit概念原理該命令解析器程序運用了C++與C語言相結(jié)合完成了題目所要求的幾種功能,并充分調(diào)用了外部函數(shù)實現(xiàn)各項功能。如下是程序中運用較為重要的幾個函數(shù):在pwd〔〕函數(shù)里用到了getcwd〔〕函數(shù),該函數(shù)原型為:char*_getcwd(char*buffer,intmaxlen);功能:獲取當(dāng)前工作目錄。參數(shù)說明:_getcwd()會將當(dāng)前工作目錄的絕對路徑復(fù)制到參數(shù)buffer所指的內(nèi)存空間中,參數(shù)maxlen為buffer的空間大小。所以需要顯示當(dāng)前所在目錄的路徑名只需要運用getcwd〔〕函數(shù)就能直接獲取出來。在dir〔〕函數(shù)里用到了opendir〔〕函數(shù),該函數(shù)原型為:DIR*opendir(constchar*path);功能:翻開一個目錄。該函數(shù)的使用方便程序翻開當(dāng)前目錄或自己需要翻開的目錄,如果翻開失敗返回值為-1。readdir〔〕函數(shù)語法:structdirent*readdir(DIR*dir_handle);返回值:dirent結(jié)構(gòu)函數(shù)種類:文件存取內(nèi)容說明:本函數(shù)用來讀取目錄。返回是dirent結(jié)構(gòu)體指針。closedir〔〕是關(guān)閉目錄句柄的函數(shù),voidclosedir(resource$dir_handle)關(guān)閉由dir_handle指定的目錄流。流必須之前被opendir()所翻開。opendir()、readdir()、closedir()三個函數(shù)的作用可以理解為當(dāng)程序讀取dir()函數(shù)的時候翻開當(dāng)前的工作目錄然后依次讀取目錄信息最后輸出目錄信息,三者都缺一不可,否那么不能完整的輸出該目錄的信息。在cd〔〕函數(shù)里用到了chdir〔〕函數(shù),chdir是C語言中的一個系統(tǒng)調(diào)用函數(shù)〔同cd〕函數(shù)名稱:_chdir〔在TC2.0下可以寫作chdir〕功能:改變當(dāng)前工作目錄頭文件:direct.h〔在TC2.0下為dir.h〕用法:int_chdir(constchar*path);返回值:成功返回0,失敗返回-1當(dāng)成功改變當(dāng)前目錄時那么返回0,假設(shè)目錄不存在或改變不成功時返回-1。在新建目錄函數(shù)newdir〔〕里有一個重要的創(chuàng)立目錄函數(shù)mkdir〔〕,該函數(shù)的頭文件庫:#include<sys/stat.h>#include<sys/types.h>函數(shù)原型:intmkdir(constchar*pathname,mode_tmode);函數(shù)說明:mkdir()函數(shù)以mode方式創(chuàng)立一個以參數(shù)pathname命名的目錄,mode定義新創(chuàng)立目錄的權(quán)限。返回值:假設(shè)目錄創(chuàng)立成功,那么返回0;否那么返回-1,并將錯誤記錄到全局變量errno中。與新建目錄函數(shù)用法相同但意義相反的是在刪除函數(shù)deldir〔〕里的rmdir〔〕,該函數(shù)名稱:_rmdir〔TC下為rmdir〕函數(shù)原型:int_rmdir(constchar*dirname);函數(shù)功能:刪除一個目錄,假設(shè)成功那么返回0,否那么返回-1。完成情況題目要求實現(xiàn)的根本命令已經(jīng)實現(xiàn),由于有些不懂的函數(shù)是在網(wǎng)上查詢而來的所以該程序?qū)懛瓷先ビ悬c亂,但分布有條理,讓人看上去通俗易懂。還有就是該程序的登錄界面十分簡潔,沒有花大量的功夫在主登錄界面的排版上,看上去顯得很草率。詳細(xì)設(shè)計程序的每個功能都有由一個函數(shù)來實現(xiàn),而函數(shù)里面有許多調(diào)用外部的函數(shù)需要在網(wǎng)上尋找它們的用法。voidpwd(){chara[300];getcwd(a,300);cout<<a<<endl;}getcwd()函數(shù)返回當(dāng)前目錄。假設(shè)成功,那么返回當(dāng)前工作目錄,否那么返回false。在intdir()函數(shù)中:printf("輸入要進(jìn)入的目錄名,輸入.為查看當(dāng)前目錄\n");scanf("%s",m);if(strcmp(".",m)==0)//如果命令不帶參數(shù){dir=opendir(".");//翻開當(dāng)前工作目錄}else{dir=opendir(m);//翻開需要翻開的目錄}當(dāng)輸入了dir后屏幕那么出現(xiàn)“輸入要進(jìn)入的目錄名,輸入.為查看當(dāng)前目錄”這些字,如果要查看當(dāng)前目錄那么直接鍵入“.”回車屏幕顯示出當(dāng)前目錄。如果需要進(jìn)入其他目錄那么輸入dir后再鍵入您所需要進(jìn)入的目錄名稱即可。{printf("翻開目錄失敗!\n");return-1;//opendir〔〕函數(shù)的失敗返回值為-1}readdir〔〕//讀取目錄信息closedir〔〕//是關(guān)閉目錄句柄的函數(shù),流必須之前被opendir()所翻開。在cd()函數(shù)中:調(diào)用了chdir()函數(shù)目的是改變當(dāng)前工作目錄。scanf("%s",ab);if(chdir(ab)==-1)//改變目錄并判斷是否失敗{cout<<"目錄不存在!"<<endl;return-1;}elsecout<<"改變目錄成功"<<endl;return0;但程序成功改變目錄那么返回0,改變目錄失敗那么返回-1。在newdir()與deldir()兩個函數(shù)中分別運用了mkdir()與rmdir()來實現(xiàn)目錄的創(chuàng)立與刪除功能,該函數(shù)的用法是在網(wǎng)上學(xué)習(xí)而來的,其中在mkdir(n,0777)中的0777是一個權(quán)限設(shè)置,默認(rèn)的mkdir是0777,意味著最大可能的訪問權(quán)。voidkris(){cout<<"[200930111016@]$";}該函數(shù)是完成題目要求的命令介紹程序提示符為:姓名拼音@。在main〔〕主函數(shù)中:while(1){scanf("%s",n);if(strcmp(n,"exit")==0)exit(1);elseif((strcmp(n,"pwd"))==0){pwd();kris();}if(strcmp(n,"dir")==0){dir();kris();}if(strcmp(n,"cd")==0){cd();kris();}if(strcmp(n,"newdir")==0){newdir();kris();}if(strcmp(n,"deldir")==0){deldir();kris();}}該主函數(shù)運用了簡單了if語句來完成最后的系統(tǒng)調(diào)用,從而到達(dá)了各個命令的功能。
使用情況1、當(dāng)輸入./a.out后那么進(jìn)入該命令解析器,如下列圖為該解析器的首界面。按照首界面的提示輸入pwd后那么顯示當(dāng)前所在目錄的路徑名。2、當(dāng)輸入dir后那么屏幕顯示如下列圖1,如果要查看當(dāng)前目錄就需要輸入”.”回車后如下列圖2顯示出當(dāng)前目錄中的所有目錄及文件。3、輸入cd<目錄名或路徑>那么改變目錄成功,鍵入pwd即可查看到當(dāng)前目錄已經(jīng)改變。4、輸入newdir<目錄名>為新建一個目錄,該目錄名稱為您所輸入的目錄名。如圖我新建了一個名為jjj的目錄,新建成功后鍵入dir那么查詢到剛剛新建的目錄。5、輸入deldir<目錄名>為刪除您所輸入的目錄。如圖我刪除名為jin的目錄,刪除成功后鍵入dir那么找不到剛剛刪除的目錄。說明刪除成功。
設(shè)計總結(jié)遇到的困難及解決的問題:此次課程設(shè)計其實在一開始編寫輸出當(dāng)前路徑的函數(shù)的時候就覺得有困難,但后來想想可以直接調(diào)用外部的函數(shù)到達(dá)與pwd相同功能即可,這樣一來后面的思路就迎刃而解了,許多功能直接調(diào)用外部的函數(shù)即可實現(xiàn)所需要的功能,
溫馨提示
- 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民間借款合同協(xié)議書模板
- 2025深圳市全日制用工勞動合同范本
- 2025汽車駕駛員雇傭合同
- 2025股份有限公司分立合同
- 二零二五年度辦公室租賃合同(含企業(yè)國際化運營支持)3篇
- 2025年度年度監(jiān)護(hù)權(quán)爭議解決合同3篇
- 2025住宅小區(qū)物業(yè)管理合同范本
- 二零二五年度人工智能與自動駕駛公司戰(zhàn)略合作協(xié)議書3篇
- 2025年度網(wǎng)絡(luò)安全公司銷售人員二零二五年度勞動合同3篇
- 2025年度養(yǎng)殖企業(yè)產(chǎn)業(yè)鏈優(yōu)化合作協(xié)議3篇
- GB/T 231.2-2012金屬材料布氏硬度試驗第2部分:硬度計的檢驗與校準(zhǔn)
- GA/T 975-2019警用裝備名詞術(shù)語
- 《天津市安全生產(chǎn)條例》試習(xí)題 -參考答案
- 傳統(tǒng)運動養(yǎng)生法課件
- iatf16949培訓(xùn)教材課件
- DB64-T 1671.1-2019兒童福利機(jī)構(gòu)兒童養(yǎng)教康一體化服務(wù)規(guī)范 第1部分:唇腭裂-(高清可復(fù)制)
- 牛津滬教版六上英語Unit 2 My summer holiday課件
- 2021年中國保險保障基金有限責(zé)任公司校園招聘筆試試題及答案解析
- 汽車維修人員培訓(xùn)管理制度
- 消化內(nèi)科診療指南和技術(shù)操作規(guī)范
- 作文稿紙A4打印模板-
評論
0/150
提交評論