在寫myshell的時候,其實剛開始很多都不會,但是看著書上的解釋,同時網上查閱資料,最重要的是問學長如何編寫,慢慢的編寫myshell也快了起來,雖然有很多的錯誤和bug,但是大部分在後面都等到了解決。
下面是一些我自己在寫myshell的時候遇到的坑點:
1.首先是命令列引數的解析,這是一開始就容易錯的地方,也讓我花費了很多時間。
2.readline
庫函式,在使用的時候按下刪除健就把一行都刪除掉了,我的myshell前面的提示符也都一起刪除掉了,我解決的方法是在readline
函式呼叫的時候,在裡面加入了乙個字元。
3.cd
命令實現的時候,一開始我是在子程序中實現cd
命令,但是程式執行的時候使用cd
命令的時候,程式沒有報錯也正常執行,但是在使用pwd
檢視當前工作目錄的時候卻發現,當前工作目錄還是沒有改變。最後在父程序改變工作目錄後,程式的工作目錄才發生改變。
4.追加重定向實現的時候,如果檔案不存在應該新建,還有就是檔案許可權的問題。
5execvp
執行命令是遇到null的時候結束執行,這個也是乙個坑點,比如>>
解析的時候就把它在字串陣列裡面變為null
然後呼叫execvp
就可以正常執行,否則會把>>
也識別成檔名。
6.cd
是內建命令,所以應該另外處理,呼叫execvp
會導致報錯。
7.新增環境變數的時候直接新增到/home
下的.bashrc
檔案中就可以了。
8.還有就是如何ctrl+c
殺不掉myshell程序,可以新建乙個空函式,然後用函式signal(sigint,函式名)就可以實現。
以上就是我在實現myshell的時候遇到的一些坑點。原始碼也上傳到github。
這次myshell也讓我知道了,系統的myshell這麼完全的功能背後是多少大師的心血。
LinuxC程式設計實戰學習筆記 一
page 95 104 啟動 gcc g test.c o test g引數必須加 gdb test gdb 程式檔名 加上 q引數不輸出版權說明 gdb q 也可以直接輸入gdb,用file命令裝入需要除錯的程式 gdb file test gdb 是提示符 退出 gdb quit 顯示 gdb ...
linuxC程式設計實戰 第六章
函式宣告 int atoi const char nptr 標頭檔案 include 函式說明 將字串轉換成整數.例如 atoi 777 這個函式怎麼這麼好用呢 以前竟然不知道 exit 0 正常執行程式並退出程式 exit 1 非正常執行程式導致程式退出 return 返回函式,若在非主函式中,則...
linux c 程式設計
linux下為了安全性不能雙擊執行控制台程式,只有gui程式才能雙擊執行.linux下檔案的型別是不依賴於其字尾名的,但一般來講 o,是目標檔案,相當於windows中的.obj檔案 so 為共享庫,是shared object,用於動態連線的,和dll差不多 a為靜態庫,是好多個.o合在一起,用於...