LinuxC程式設計實戰Myshell總結

2021-08-04 15:21:15 字數 1075 閱讀 8745

在寫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合在一起,用於...