版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)課程設(shè)計(jì)說明書 在Linux環(huán)境下模擬實(shí)現(xiàn)命令解釋器專業(yè):班級:姓名:學(xué)號:班內(nèi)序號:一 程序概述1. 命令解釋器的源程序保存在服務(wù)器上的路徑為:home / 1-31 / j j . c的目錄文件中??蓤?zhí)行程序保存在服務(wù)器上的路徑為:home / 1-31 / j 。2. 該命令解釋器所完成的功能如下:輸入pwd指令來查看目前所在的工作目錄的絕對路徑名稱。簡單得說,每當(dāng)你在終端進(jìn)行操作時,你都會有一個當(dāng)前工作目錄。一般開啟終端后默認(rèn)的“當(dāng)前工作目錄”是用戶的“主文件夾”。 輸入dir指令顯示目錄,顯示指定目錄下或當(dāng)前目錄下的信息,包括文件名等等。輸入cd +指令改變當(dāng)前文件路徑,實(shí)現(xiàn)
2、將當(dāng)前用戶的當(dāng)前工作目錄更改至 cd 命令中指定的目錄或文件夾。如果未指定目標(biāo)目錄名(即只輸入“cd”或沒輸入目錄名或文件名),則輸出錯誤信息。輸入newdir +指令創(chuàng)建一個新的目錄或文件夾,如果創(chuàng)建已存在的目錄,則輸出創(chuàng)建失敗。輸入deldir+指令刪除一個指定的目錄或文件夾,若刪除不存在的目錄或文件,則顯示刪除失敗。輸入exit指令退出命令解釋程序 二 概念原理strcmp(str1,str2)函數(shù)就是比較參數(shù)中兩個字符串str1 和 str2的大?。ù笮懨舾校碅 != a),如果完全相等,返回0,如果str1 str2,則返回1。本程序的strcmp()函數(shù)就是比較t1與6個指令的
3、大小,來輸出相應(yīng)的信息。chdir()是C語言中的一個系統(tǒng)調(diào)用函數(shù),功 能:改變工作目錄,用 法: int chdir(const char *path);返回值:成功返回0 ,失敗返回-1。mkdir()創(chuàng)建由dir-name命名的目錄。要求創(chuàng)建目錄的用戶在當(dāng)前目錄中(dir-name的父目錄中)具有寫權(quán)限,并且dirname不能是當(dāng)前目錄中已有的目錄或文件名稱。rmdir()刪除文件目錄,在可以除去該目錄前,它必須為空,并且必須有它的父目錄的寫權(quán)限。getcwd()函數(shù)的功能是取當(dāng)前工作目錄,getcwd()會將當(dāng)前工作目錄的絕對路徑復(fù)制到參數(shù)buf所指的內(nèi)存空間中,參數(shù)size為buf的
4、空間大小。用 法: char *getcwd(char *buf, int n);perror ()用來將上一個函數(shù)發(fā)生錯誤的原因輸出到標(biāo)準(zhǔn)錯誤。三 詳細(xì)設(shè)計(jì)#include#include#include#include#includeint main(void) int s; pid_t pid; char t150; /定義數(shù)組t1用來存放鍵盤輸入的字符串 char t250; while(1) printf(); char com100; /定義數(shù)組com用來存放鍵盤輸入的字符串 gets(com); /com100被gets()函數(shù)賦值為0 char t150; char t250;
5、 int i=0,j=0,k=0; int flag=0; while(comi!=0x0d&comi!=0x0a&comi!=0) /0x0a表示回車,0x0d表示換行 if(comi!= &flag=0) t1j+=comi; else if(flag!=0) t2k+=comi; flag=1; i+; t1j=0; t2k=0; if(strcmp(t1,exit)=0) / 退出程序功能,運(yùn)用strcmp()函數(shù)來進(jìn)行t1與exit 的比較,返回值等于0,2個字串匹配,執(zhí)行退出 printf(exit program commandn); 指令return 0; else if(st
6、rcmp(t1,cd)=0) /功能:改變當(dāng)前目錄的路徑,用strcmp()函數(shù)來 比較t1與cd,等于0,執(zhí)行if語句 if(chdir(t2)!=0) / chdir()改變工作目錄,不等于0改變目錄失敗 printf(enter dir errorn); else if(strcmp(t1,newdir)=0) /功能:新建目錄,用strcmp()函數(shù)來比較t1與newdir,等于0,執(zhí)行if,else語句 if(mkdir(t2)!=0) /mkdir()創(chuàng)建一個新目錄,不等于0創(chuàng)建失敗 printf(creat dir failedn); else mkdir(t2,0700); /
7、創(chuàng)建的目錄寫了權(quán)限 printf(creat dir succedn); else if(strcmp(t1,deldir)=0) /功能:刪除目錄,用strcmp()函數(shù)來比較t1與 deldir,等于0,執(zhí)行if,else語句 if(rmdir(t2)!=0) /不等于0,刪除目錄失敗 printf(delete dir failedn); else rmdir(t2); printf(delete dir succedn); else if(strcmp(t1,pwd)=0) /功能:顯示當(dāng)前目錄或指定目錄,運(yùn)用strcmp()函數(shù) 來比較t1與pwd的大小,等于0匹配成功,執(zhí)行輸出 c
8、har t50; getcwd(t,50); /運(yùn)用getcwd()函數(shù)來獲取當(dāng)前的路徑并存入數(shù)組P,然后輸出 printf(current dir:%sn,t);else if(strcmp(t1,dir)=0) /功能:顯示當(dāng)前路徑的所有目錄和文件,用strcmp()函數(shù)比較t1與dir,等于0,執(zhí)行if語句 DIR *dir; struct dirent *t; /保存readdir返回的具體的文件 if(strcmp(t2,)=0) getcwd (t2,50);dir=opendir(t2); /dir指針用來保存指向opendir函數(shù)打開目錄后返回的地址while(t=readdi
9、r(dir)!=NULL) /調(diào)用readdir函數(shù)獲得dirent結(jié)構(gòu) 體,通過while循環(huán)輸出相關(guān)信息 printf(%st,t-d_name); printf(n); else printf(enter errrorn); if(pid=fork()0) /創(chuàng)建子進(jìn)程失敗 perror(fork); return(0); wait(&s); return 0;四 完成情況該命令解釋器基本能完成所要求的功能,只能在linux環(huán)境下進(jìn)行操作,只限于輸入6種指令,包括pwd,dir,cd,newdir,deldir,exit這6種指令,正確的以開頭行當(dāng)成模式和命令的輸入并能對其解釋,若輸入錯
10、誤會提示出錯誤信息,請重新輸入指令,直到輸入正確指令才顯示對應(yīng)信息。五 使用情況編譯的功能運(yùn)行如下:輸入pwd指令,顯示當(dāng)前的路徑,如下圖:輸入dir指令,顯示當(dāng)前路徑的目錄和文件,如下圖:輸入newdir+目錄名,若有重復(fù)目錄名,顯示新建失敗,如下圖:輸入deldir+目錄名,若當(dāng)前路徑?jīng)]有該目錄或文件,顯示刪除失敗,如下圖:輸入cd+目錄名,顯示當(dāng)前路徑,若輸入目錄名不存在,顯示輸入錯誤,如下圖:輸入exit指令,退出運(yùn)行程序,如下圖:若輸入不是以上6種指令,顯示輸入錯誤,如下圖:六 設(shè)計(jì)總結(jié)1. 遇到的困難及解決的問題本次設(shè)計(jì)主要遇到以下2個比較困難的問題,但最終都能把它給解決了。在運(yùn)行
11、時,輸入各個功能指令時,不能輸出任何信息,只輸出指令錯誤,原來是解釋函數(shù)出現(xiàn)問題,數(shù)組沒有設(shè)置好。在dir功能組中,運(yùn)行時不能顯示當(dāng)前路徑的目錄,通過上網(wǎng)查找到的資料,用dir指針用來保存指向opendir函數(shù)打開目錄后返回的地址,調(diào)用readdir函數(shù)獲得dirent結(jié)構(gòu),再運(yùn)用getcwd()函數(shù),這樣才能正常輸出。2. 實(shí)踐感受這次課程設(shè)計(jì)一開始沒有頭緒,感覺無從下手。因?yàn)椴僮飨到y(tǒng)是上學(xué)期修的課程,所以隔了一個假期,都忘了差不多了,所以參考了不少資料。我首先按照課程要求所給的架構(gòu)去進(jìn)行分析,然后參考一些書籍來慢慢編寫出整個程序出來,雖然在編寫的過程中遇到好多問題,有些連自己也解決不了,不過經(jīng)過與同學(xué)的討論,以及上網(wǎng)查找,終于能把遇到的問題都解決了。在
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 有限公司合同范本
- 2024專業(yè)加工服務(wù)協(xié)議樣本
- 2024建筑外墻裝修改造協(xié)議樣本
- 信息素養(yǎng)(一)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 首都醫(yī)科大學(xué)附屬北京友誼醫(yī)院(含社會人員)招聘真題
- 2023年雅安市招才引智活動全國引進(jìn)考試真題
- 河池市宜州區(qū)招聘中小學(xué)教師真題
- 崇左市扶綏縣教育局中小學(xué)教師招聘真題
- 鋼板樁2024年度建筑租賃協(xié)議樣本
- 2024年BIM行業(yè)標(biāo)準(zhǔn)與規(guī)范解讀
- 2023燃?xì)夤こ谭职贤?guī)版
- 陜西師范大學(xué)學(xué)位英語試題
- 【基于嵌入式的人體健康智能檢測系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)14000字(論文)】
- 基礎(chǔ)管理風(fēng)險(xiǎn)分級管控清單(雙體系)
- 醫(yī)學(xué)課件:臨床決策分析
- 江蘇開放大學(xué)2023年秋《中級會計(jì)實(shí)務(wù)(上) 050284》第4次任務(wù)參考答案
- 屋頂光伏安全專項(xiàng)施工方案
- 4.與食品經(jīng)營相適應(yīng)的主要設(shè)備設(shè)施布局操作流程等文件
- 四班三倒排班表
- 銀行業(yè)信息系統(tǒng)災(zāi)難恢復(fù)管理規(guī)范
- 醫(yī)院重點(diǎn)崗位工作人員輪崗制度
評論
0/150
提交評論