CSCSHELL截止時間為週日晚上11:59。積分2002月14日後12點開始發售。A3–CSCSHELLCSC209 2024年冬季上次更新(3月15日):見5.7目錄1.簡介2.入門檔案2.1. 實際開始3.CSCSHELL4.限制(shell的東西你不必實現)5.實施和要求5.1. 管理錯誤5.2. 外殼變數5.2.1. 創造5.2.2. 用法5.2.3. 路徑5.2.4. 使用變數賦值進行錯誤檢查5.3. 指令碼和.cscsh_init5.4. 處決5.4.1. cd命令5.5. 檔案重定向5.6. 管道5.7. 註釋和澄清(請檢視此處瞭解任何更新)6.標記1.簡介在最初的幾堂課中,我們一起學習了命令列的基本“語法”。我們聊了一會兒關於終端程式,以及這個叫做BASH的東西,或者更一般地說是shell。在本次作業中,您將實現一個基本的shell,該shell可以執行我們在到目前為止的課程(令我驚訝的是,手冊頁和vi也得到了支援,至少在teach.cs和我的自己的機器)。它將能夠使用系統啟動可執行檔案(具有適當許可權的檔案)在特殊$PATH變數中列出的任何目錄以及具有絕對或相對路徑的任何目錄中找到CSCSHELL2/11(例如,如果您鍵入./hello)當然,您還可以為這些提供命令列引數程式。這個shell將是互動式的,並且可以適度地編寫指令碼。當“互動式”時,鍵入終端程式(本身執行您的shell程式)將向其他正在執行的stdin提供輸入可執行檔案,以及顯示stdout和stderr的輸出。真的,你已經習慣了“命令列”,但由您編寫!最終,它將支援檔案重定向、管道和讀取來自指令碼檔案的命令,因此您不侷限於此shell的互動式使用。雖然我們無法完全支援任何和所有程式代 寫CSC209,也就是說,安裝在teach.cs上(這需要持續的維護和錯誤修復),我們將能夠使用基本系統我們已經學會使用的程式,比如cd(實際上是一種特殊情況)、ls、mkdir、rm、grep、touch、man,cat、wc等——以及您為該課程開發的所有程式。此分配將具有大量的C字串解析、檔案i/o以及系統呼叫的標準用法(族):fork、exec、wait、pipe和dup。2.入門檔案標頭檔案cscshell.h有很多詳細資訊可以幫助您入門。請不要刪除或編輯任何已經存在的內容,但可以隨意新增更多的函式宣告、宏和任何庫不需要連結,可以在teach.cs上找到。不要更改結構定義,測試人員將使用這些定義,所以您只能使用它們。除了cscshell.h,還有附帶的cscshell.c,它具有main()入口點為您的程式。不需要更改此原始檔。如果您這樣做,您只能新增功能,並且不刪除任何現有功能(此外,我們不會測試任何其他功能您新增的功能)。parse.c和run.c檔案是這個賦值的兩個主要部分。您實現的每一項功能應該新增到這兩個檔案中的一個,這取決於它是用於解析shell文字,還是用於執行程序/其他可執行檔案。2.1. 實際開始本作業的系統呼叫方面所需的材料將不會在課堂上介紹,直到第7周和第8周,所以儘快開始解析shell語法(因為您已經你需要的一切),並開始問自己,你需要什麼才能完成剩下的工作。原始檔包括許多附加資訊,旨在引導您成功完成任務,以及一些助手和部分完成的功能。請隨意開始根據cscshell的說法,如果你是那種人的話。3.CSCSHELLCSCSHELL3/11這個shell將類似於POSIX sh(https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html)(很像BASH(https://www.gnu.org/software/bash/) ; 你可以在teach.cs機器、Ubunseu或WSL上找到;或zsh(https://wiki.archlinux.org/title/zsh#:~:text=Zsh is a power shell,改進 ab comple; 你可以在你的蘋果產品上找到)。然而,我們將保持它的深度簡化,重點關注以下功能:1.註釋:任何一行後面跟著#字元的內容都是註釋,因此被忽略2.變數分配和使用。見5.2。3.指令碼執行,包括一個強制性的init指令碼,該指令碼最初必須在某個點4.cd命令,因為這不是可執行檔案,它是由shell提供的系統控制訪問5.使用系統呼叫啟動具有任意字串引數的可執行檔案。程式是的第一部分CSCSHELL的任何可用行(前提是它不是cd、變數賦值或註釋),並且可以在${PATH}目錄中找到的名稱,或者程式的明確路徑(相對或絕對均可接受)。6.檔案從stdout重定向到新的(或重新建立現有的)檔案或附加到現有檔案,如以及從檔案重定向到stdin7.一個程式的標準輸出和下一個程式標準輸入之間的管道連線。所有程序都必須執行同時4.限制(shell的東西你不必實現)即使是最基本的POSIX sh(https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html)支援更多的功能,事實上,它是一種相當全面的指令碼語言。我們不會實現除了3中列出的功能之外的任何功能。一些明顯的侷限性:1.不支援元字元/匹配,例如“*”2.迴圈、條件語句、通用程式設計指令碼功能3.指令碼的命令列引數(如果沒有2,則有些毫無意義。)4.重定向到/帶有檔案描述符編號(透過shell語法)5.命令歷史記錄和選項卡完成此外,只有一個環境變數($PATH)是相當有限的,因此維護變數作為連結串列。如果你真的很喜歡這項工作,我建議用一些如果你想鍛鍊的話,這些缺失的功能。5.實施和要求5.1. 管理錯誤CSCSHELL4/11由系統故障引起的錯誤,例如malloc記憶體不足,應該會導致shell終止然而,與CSCSHELL的使用有關的錯誤應該得到妥善處理結束shell時,這些應該只列印一條錯誤訊息。標題cscshell.h列出了各種當出現問題時,要列印到stderr的帶有(格式化)字串的宏。您可以在中找到示例關於如何使用它們,特別是使用ERR_PRINT。如果您無法決定使用哪個錯誤,使用通用錯誤:#define ERR_EXECUTE_LINE“無法執行行。\n”更新:您可以使用ERR_PRINT宏中的任何錯誤訊息來透過自動測試。對於使用哪條訊息,不必有任何混淆。請注意,好的資訊會對您有所幫助除錯。5.2. 外殼變數5.2.1. 創造外殼變數必須指定為名稱,僅由字母字元和組成_(下劃線)字元。變數值是一個可以包含任何ASCII字元的字串。請注意,行的換行符不是變數值的一部分。單個=必須將變數名和值分隔開,名稱之間不能有空格和變數值中可以有空格,該值也可以為空(無,或只是'=''後面的空白)。這意味著您可能還會發現額外的空白,包括“\t”(當使用fgets讀取輸入時,'\n'和'\r'會變得混亂,所以我們會放鬆這一點,而不必擔心)。不需要從值中刪除此空白。一些極端但正確的變數作業可能如下所示:PATH=某些文字,其中肯定包含空格。OTHER_VAR=示例具有特殊(選項卡)空白。EMPTY_VAR_ONE=EMPTY_VAR_TWO=注意:EMPTY_VAR_TWO實際上有一些空格作為值,EMPTY_VARS_ONE沒有,突出顯示使用游標填充空白,以便更清楚地檢視。以下是一些不正確分配的示例:BAD_VAR2=名稱中有一個數字Badvar=等號之前不應該有空格。這是非常錯誤的,希望原因很清楚!注意:引用將被簡單地假設為字串的一部分,希望能讓您的工作更輕鬆。因此,在本例中:OTHR_VAR=“你好世界”CSCSHELL5/11變數的名稱是OTHR_VAR,它的值包括引號,儲存:“helloworld”(13字元–以及作為C字串的空終止符)。最後,請注意,如果您鍵入文字轉義序列“\t”或“\n”,則它們被解釋為兩個字元,但由於我們在這個shell中不使用TAB進行自動完成,因此使用TAB鍵將為您提供“\t”字元,形式是插入一個大空格(和C字元值“\t”)。返回參考OTHR_VAR以上。5.2.2. 用法澄清(2004年3月):在本分配中,變數只能用於命令,如中所示,在建立過程中不考慮使用(不需要支援$VAR=使用一些$OTHER值,如果您願意,您可以支援它)。1.簡單shell中的變數用法包括在變數名稱之前加字首的$。如:SPECIAL_FILE=/etc/passwordecho“檔案:$SPECIAL_file並不真正存在。”注意:如果您想將變數與有效變數的符號組合在一起,這是不明確的字元。由於空間的原因,變數的末尾很清楚,但請考慮:PROJECT_DIR=a3/解決方案/
CSC209 系統故障 管道
相關文章
- 管道系統
- Go 系統命令管道操作Go
- Linux系統程式設計—有名管道Linux程式設計
- 系統程式設計——管道通訊程式設計
- Linux系統程式設計之匿名管道Linux程式設計
- Linux之系統故障彙總Linux
- 【故障公告】部落格系統升級到 .NET 5.0 引發的故障
- 統信UOS系統常見故障及處理方法
- 在分散式系統中使用非同步管道建立實體分散式非同步
- 【linux】系統程式設計-1-程式、管道和訊號Linux程式設計
- 在Linux中,如何進行系統故障排查?Linux
- Tenorshare ReiBoot Pro iOS系統故障修復工具bootiOS
- win10系統kernelbase.dll故障如何修復_win10系統kernelbase.dll故障怎麼解決Win10
- Linux-task_struct和檔案系統及管道的關係LinuxStruct
- Linux系統程式設計之程式間通訊方式:管道(二)Linux程式設計
- Linux系統程式設計之程式間通訊方式:管道(一)Linux程式設計
- Linux系統中的管道命令、grep命令、sed命令和awk命令Linux
- Linux系統程式設計之命名管道與共享記憶體Linux程式設計記憶體
- windows10系統如何禁用推薦故障排除Windows
- 在Linux中,如何進行系統故障恢復?Linux
- Centos 伺服器系統記憶體故障排查CentOS伺服器記憶體
- 銀河麒麟系統部署keepalived.故障處理
- Linunx系統引導過程及MBR/GRUB故障
- Linux系統程式設計之程式間通訊方式:命名管道(二)Linux程式設計
- Linux系統程式設計之程式間通訊方式:命名管道(一)Linux程式設計
- 資料中心儲存系統故障的處理方式
- Windows還原系統後分割槽故障解決方案Windows
- 分散式系統中,級聯故障是最可怕的分散式
- Windows作業系統常見故障問題和解決方案Windows作業系統
- 銀河麒麟系統安裝mongodb副本集故障處理MongoDB
- 管道 |
- SpaceX揭祕爆炸原因:或因氦低溫系統故障所致
- 因系統故障,美國逾10000架次航班延誤
- CRM系統中的銷售管道是什麼?如何實現業績增加的?
- PTS氣動管道系統爆9個漏洞!北美80%大型醫院受影響
- angular 管道Angular
- 【linux】管道!!!Linux
- redis管道Redis