freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linux命令解釋器的設(shè)計(jì)本科畢業(yè)論文-wenkub

2022-09-06 16:46:37 本頁(yè)面
 

【正文】 具介紹 ................................................................................. 6 開發(fā)環(huán)境 Ubuntu............................................. 6 開發(fā)工具 GCC................................................. 6 3 模擬 shell 設(shè)計(jì) .................................................................................................. 7 簡(jiǎn)單 shell 設(shè)計(jì)思想 ........................................... 7 復(fù)雜 shell 設(shè)計(jì)思想 ........................................... 8 作業(yè)及作業(yè)前后調(diào)度實(shí)現(xiàn)方法 ............................. 8 進(jìn)程組、會(huì)話與終端 ..................................... 9 命令行 ................................................ 10 &、 bg、 fg等信號(hào)的思想 ............................... 10 管道 .................................................. 11 重定向 ................................................ 11 4 Shell 的實(shí)現(xiàn) ...................................................................................................... 13 數(shù)據(jù)結(jié)構(gòu) ................................................ 13 程序結(jié)構(gòu) ................................................ 13 初始化環(huán)境 ............................................ 13 解析命令 .............................................. 14 查找外部程序 .......................................... 15 執(zhí)行命令 .............................................. 16 管道 .................................................. 17 作業(yè)控制命令 .......................................... 18 5 結(jié)束語(yǔ) ................................................................................................................... 20 致謝 ............................................................................................................................ 21 參考文獻(xiàn) ................................................................................................................... 22 附錄 ............................................................................................................................ 23 Linux 命令解釋器的設(shè)計(jì) 摘 要 : 隨著 Linux 系統(tǒng)使用的越來越廣泛,越來越多的人開始深入 的研究Linux,特別是對(duì) Linux shell 的研究是對(duì) Linux 研究最主要的部分。在嵌入式領(lǐng)域中就像傳統(tǒng)的 K shell, C shell, Bourne shell 等大型的 shell 程序就會(huì)令硬件方面的東西很少。從 shell 向 Linux發(fā)出命令時(shí),內(nèi)核會(huì)對(duì)該命令做出相應(yīng)的解釋。 每當(dāng)執(zhí)行 shell 命令行時(shí)一般會(huì)打開三個(gè)標(biāo)準(zhǔn)文件,這三個(gè)標(biāo)準(zhǔn)文件就是標(biāo)準(zhǔn)輸入文件 (stdin), 一般對(duì)應(yīng)用戶所用的輸入鍵盤;標(biāo)準(zhǔn)輸出文件 (stdout)和標(biāo)準(zhǔn)錯(cuò)誤輸出文件 (stderr),這兩個(gè)文件都對(duì)應(yīng)著用戶所用的輸出屏幕。輸出重定向就是把命令(或可執(zhí)行程序)的標(biāo)準(zhǔn)輸出或標(biāo)準(zhǔn)錯(cuò)誤輸出重新定向到目標(biāo)中。 Linux 像 windows 一樣提供了很多可視化界面有窗口、圖標(biāo)和菜單,大部分控制都是通過鼠標(biāo)來操作。同 Linux 本身一樣, Shell 也有多種不同的版本。 C Shell:是 SUN 公司 Shell 的 BSD版本。內(nèi)核在系統(tǒng)開機(jī)時(shí)將內(nèi)存載入,關(guān)機(jī)后不再管理系統(tǒng)。 當(dāng)用戶開機(jī)并登陸后,系統(tǒng)不需要等待用戶的命令會(huì)自動(dòng)啟動(dòng)一個(gè) Shell。 UNIX Shell UNIX 系統(tǒng)大都支持 3 種主流的 shell,他們是 BourneShell(也稱為 AT& T shell)、 C shell(也稱為 Berkeley)和 Korn shell( Bourne shell 的一個(gè)展集)。 Bourne Shell的使用是非常簡(jiǎn)練的,而且很嚴(yán)謹(jǐn),效率很高,它的命令提示符是 $。 C shell 默認(rèn)的提示符是百分 號(hào) (%)。 Linux 上默認(rèn)的 shell 是 GUN bash( Bourne Again shell),這是一種增強(qiáng)的 Bourne shell,人們可以根據(jù)自己的工作環(huán)境進(jìn)行 編輯,因?yàn)樗墓δ苡幸徊糠诌€是有局限的,通過自己的編輯可以提高速度。 shell 的歷史 Shell 首個(gè)標(biāo)準(zhǔn)是在 1979 年由 Stephen Bourne 提出的,并且以該 人的名字來作為名字。它的主要的開發(fā)人是 Bill Joy。由于不同版本的 Shell 發(fā)布,人們開始有選擇的使用 Shell,對(duì)于不同的 Shell 有自己的見解。 Korn shell 的優(yōu)點(diǎn)就是可以不止可以再 UNIX下使用,還可以在其它的系統(tǒng)下使用。 它的設(shè)計(jì)符合了 IEE POSIX 。 Shell 的另外的重要的作用就是對(duì)用戶環(huán)境進(jìn)行設(shè)定,這往往是剛開始就是初始化的時(shí)候就已經(jīng)進(jìn)行了。 2 開發(fā)環(huán)境和開發(fā)工具介紹 Ubuntu Ubuntu 比較受歡迎的原因就是,它是完全像社會(huì)人們開放的,并且希望人們對(duì)系統(tǒng)進(jìn)行完善并且是一些編程愛好者們共同開發(fā)的系統(tǒng),所以 Ubuntu 目前是并將永遠(yuǎn)是免費(fèi)的。這就是自由軟件的優(yōu)點(diǎn),也是大家都推崇的原因。但是 Gcc 已經(jīng)不只是一個(gè)但單純的編譯器了,人們已經(jīng)將它的功能擴(kuò)展到很多的語(yǔ)言上。 b) 判斷是內(nèi)部命令還是外部命令。 內(nèi)部命令: 內(nèi)部命令由 shell 程序?qū)崿F(xiàn)。 簡(jiǎn)單的 shell 流程圖如圖 所示: shell 設(shè)計(jì)思想 我們要從簡(jiǎn)單的開始入手,然后開始慢慢的了解和學(xué)習(xí)復(fù)雜的 shell,剛開始要對(duì)命令進(jìn)行分析然后判斷前 后臺(tái)調(diào)度 (amp。但是有一些作業(yè)是我們必須要自己看到運(yùn)行的結(jié)果,這就是前臺(tái)作業(yè)。 圖 為命令執(zhí)行時(shí)它們進(jìn)程狀態(tài)的不同,其中 procl 和 proc2 屬于同一個(gè)后臺(tái)進(jìn)程組中的進(jìn)程,二 proc proc proc5 被 Shell 放到同一個(gè)前臺(tái)進(jìn)程組, 在他們當(dāng)中,每一個(gè)進(jìn)程都是這個(gè)進(jìn)程組的組進(jìn)程, Shell 調(diào)用 wait 等待它們運(yùn)行結(jié)束。圖 。符號(hào)的進(jìn)程組那這個(gè)就是后臺(tái)進(jìn)程組。 這個(gè)標(biāo)識(shí)符是來標(biāo)記儲(chǔ)存該作業(yè)的數(shù)據(jù)結(jié)構(gòu)的作用,每個(gè)命令行字符串的內(nèi)容都包含在該數(shù)據(jù)結(jié)構(gòu)中,所以說,這個(gè)數(shù)據(jù)結(jié)構(gòu)還是很重要的。 &、 bg、 fg 等信號(hào)的思想 與本系統(tǒng)的任務(wù)有關(guān)的命令 (內(nèi)部命令 ): jobs、 fg、 bg 等。 4. wait%作業(yè)號(hào)則是使該作業(yè)不再繼續(xù)運(yùn)行,只有后臺(tái)作業(yè)執(zhí)行完成后才可以。 fg 命 令: 將后臺(tái)進(jìn)程發(fā)送信號(hào)切換到前臺(tái)來,即用 tcsetpgrp 獲取終端判斷進(jìn)程是否退出并阻塞父進(jìn)程,調(diào)用 waitpid 等待。 在輸入命令時(shí)要用“ |”將兩個(gè)命令分開,系統(tǒng)就會(huì)自動(dòng)從左邊的命令的輸出當(dāng)做右邊的命令的輸入。但是如果當(dāng)我們從管道的 fd[1]進(jìn)行讀取數(shù)據(jù)時(shí),或者向管道 fd[0]用于輸入數(shù)據(jù)的作用,那么就會(huì)發(fā)生錯(cuò)誤,管道是嚴(yán)格的按照相應(yīng)的規(guī)則進(jìn)行的。 一個(gè)程序命令后可能還跟有元字符“ ”或“ ”,它們是重定向符,而在重定向符號(hào)后面還跟著一個(gè)文件名。 4 Shell 的實(shí)現(xiàn) 在這次設(shè)計(jì)中,首先是建立了循環(huán)數(shù)組和鏈表數(shù)組,都用于 history 命令,用數(shù)組來保存以前曾經(jīng)輸入的命令字符。 //命令名 char state[10]。 程序結(jié)構(gòu) 這四種不同類型的命令的執(zhí)行是不一樣的,但是每種命令的程序 都有著相同的操作步驟:初始化的環(huán)境,顯示命令提示符,獲取并判定用戶輸入的命令,解析命令,最后就是尋找命令 這幾個(gè)步驟,如下圖所示: 初始化環(huán)境 在剛開始寫程序的時(shí)候,需要對(duì)幾個(gè)環(huán)境變量進(jìn)行初始化的工作。 char buf[80]。 } = 0。然后調(diào)用了另外兩個(gè)函數(shù) line (fd, buf]和 getenviron(n, buf)。然后初始化 history 命令中鏈表的頭指針和尾指針,將 和 的值置為 0,同樣將 jobs 命令中的頭指針和尾指針分別指為空, head=end=NULL。 shell 中的命令分成 4種:重定向命令,普通命 令 (外部命令 ),管道命令和內(nèi)部命令。i++){ if(input[i] == 39。||input[i] == 39。){ pipel(input,input_len)。 add_history(input)。 } } 該程序中用 for 循環(huán)將帶有字符“ ”,“ ”和“ |”符號(hào)的管道和重定向命令進(jìn)行另外的完成。 for(i = 0,j = 0,k = 0。||input[i] == 39。\039。 } }else{ if(input[i] == 39。amp。 continue。這個(gè)例子的作用就是將這條命令的 ls 首先存儲(chǔ)到 arg[0],而參數(shù) l 則存儲(chǔ)在 arg[1]。 查找外部程序 當(dāng)我們檢測(cè)到的命令不是內(nèi)部命令,也不是重定向命令和管道命令,就可以判斷是外部命令了。 if(is_founded(arg[0]) == 0){ printf(This mand is not founded!\n)。 continue。 strcat(buf,cmd)。 } 當(dāng)我們對(duì)程序初始化的時(shí)候,我們已經(jīng)將命令以及其對(duì)應(yīng)的路徑已經(jīng)存儲(chǔ)到數(shù)組 envpath[i]中,所以下面的工作就比較好做了,就直接在相對(duì)應(yīng)的路徑下查找和判斷輸入命令到底有沒有存在。 參 數(shù)說明 pathndme 是文件名稱。 執(zhí)行命令 當(dāng)我們查找到命令文件時(shí),就可以繼續(xù)執(zhí)行該命令內(nèi)容了。子進(jìn)程的數(shù)據(jù)發(fā)生變化時(shí),父進(jìn)程的數(shù)據(jù)是不會(huì)由于子進(jìn)程當(dāng)中的數(shù)據(jù)變化而改變自身的數(shù)據(jù)的。status,0)。當(dāng)一個(gè)命令是前臺(tái)執(zhí)行的,那么其父進(jìn)程則必須執(zhí)行函數(shù) waitpid,而且必須等待子進(jìn)程,只有當(dāng)子進(jìn)程結(jié)束后,父進(jìn)程才可以執(zhí)行。因?yàn)?pid 就是他父進(jìn)程中子進(jìn)程的 id 號(hào)。 管道 函數(shù) intpipel 就是實(shí)現(xiàn) shell 管道程序的函數(shù)。 初始化文件描述符 IPE: define NO_PIPE 1 define FD_READ 0 define FD_WRITE 1 for(i = 0。 } 其中 fd[i][FD_READ]和 fd[i][FD_WRITE]都是 int 類型的文件描述符。 1)建立管道 我們?cè)谶@里分別定義了 pipe_out 和 pipe_in 這兩個(gè)文件描述來描述管道的寫端和讀端。 /****************將 pipe_out 指向管道的寫端 **************/ if(i != li_cmd) pipe_out = fd[i][FD_WRITE]。
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1