首先宣告,其實是老師布置的作業,原始碼來自於乙個師兄,只做學習使用。原始碼鏈結
實現的主要功能如下:
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 ...