Linux模擬shell小demo分享與記錄

2021-08-19 09:07:52 字數 1814 閱讀 9605

首先宣告,其實是老師布置的作業,原始碼來自於乙個師兄,只做學習使用。原始碼鏈結

實現的主要功能如下:

1. ls (-a -d -i -l | -adil)

2. echo ($?)

3. cat

4. mkdir

5. rmdir

6. rm

7. cd (-)

8. chmod

9. pwd

10. wc (-)

11. date

12. exit (ctrl-d)

13. help

14. kill (-signum)

15. who

16. history

17. more

18. grep (-n -v | -nv)

19. mv

20. tee (-a)

21. time

22. ./(ps. putting a '-' before a command will call the bash built-in commands.)

在此我只摘錄其中的一些函式進行學習記錄:

int gethostname(char *name, size_t len)呼叫該函式獲取主機名到name中;

uid_t getuid(void)獲取執行目前程序的使用者識別碼,返回值為0表示為root使用者;

int pipe(int filedes[2])建立管道函式,用於父子程序之間進行通訊,輸入引數即為讀寫控制代碼;

char *getcwd(char *buf, size_t size)用於獲取當前工作目錄,如果不管返回值獲取的目錄儲存進buf中,有可能指定的size太小而導致異常,所以有另一種用法,char *buf=getcwd(null,0),這種形式實際呼叫了malloc進行動態記憶體分配了,所以使用完需釋放buf;

char *strdup(char *str)拷貝乙個字串的副本,輸入引數不能為null,因為該函式內部有strlen函式,該函式輸入引數不能為null;

char *basename(char *path)返回輸入路徑最後乙個「/」後面的內容;

fork函式建立乙個子程序,建立成功後,之後的**父子程序都會執行,在子程序中fork返回0,在父程序中

fork返回新建立的子程序的id,失敗返回負數;

execvp("ps", ps_argv)根據path環境變數提供的ps命令執行程式;

char *getenv(const char *name) 返回給定環境變數名稱所對應內容的指標;

void *calloc(unsigned n,unsigned size)分配記憶體函式,分配成功後初始化記憶體空間為0,malloc不初始化;

ssize_t getline(

char

**lineptr, size_t *n, file *stream)從檔案中讀取一行,該函式在標準c中是不存在的;

scandir函式詳細鏈結;

tcgetattr和tcsetattr函式用於控制終端詳細鏈結

;int unlink(const char *pathname)

從檔案系統中刪除乙個指定名字的檔案,並清空這個檔案使用的可用的系統資源,如空間、程序等;

char *strchr(char *str,char character)返回從字串str中尋找character第一次出現的位置的指標;

struct utmp *getutent(void)從utmp檔案中讀取登入資料;

還有一些函式跟命令命名是一致的,比如mkdir,rmdir等,具體man就行。

shell小技巧(十五)模擬抓鬮

要求 1 執行指令碼後,想去的同學輸入英文名字全拼,產生隨機數01 99之間的數字,數字越大機會越大,前面已經抓到的數字,下次不能在出現相同數字。2 第乙個輸入名字後,螢幕輸出資訊,並將名字和數字記錄到檔案裡,程式不能退出繼續等待別的學生輸入,抓完輸入exit退出。3 倒序輸出 方法1 bin ba...

小程式雙重for迴圈實現tab切換小demo

pages test test.js page clickhandle e 生命週期函式 監聽頁面載入 onload function options console.log a,b this.setdata console.log this.data.a,jjj 生命週期函式 監聽頁面初次渲染完成...

linux小實驗 考勤模擬程式

任務 設計乙個考勤模擬程式,實現如下功能選擇介面,要求使用函式 1.上班簽到 2.下班簽出 3.缺勤資訊查閱 4.退出 考勤程式執行後,提示使用者輸入上述功能選擇,並驗證使用者輸入的使用者名稱和密碼 使用者資訊儲存在userinfo.dat 中。如果是上班簽到,記錄簽到資訊,如果簽到時間大於上午8 ...