在linux系統下我們都是通過在命令列敲擊一些命令來實現一些我們想要的操作,只要了解一些程序程式替換的知識,我們也可以自己寫乙個簡易的shell。
#什麼是shell 指令碼
最簡單的解釋,乙個shell 指令碼就是乙個包含一系列命令的檔案。shell 讀取這個檔案,然後執行檔案中的所有命令,就好像這些命令已經直接被輸入到了命令列中一樣。
shell 有些獨特,因為它不僅是乙個功能強大的命令列介面, 也是乙個指令碼語言直譯器。我們將會看到,大多數能夠在命令列中完成的任務也能夠用指令碼來實現,同樣地,大多數能用指令碼實現的操作也能夠在命令列中完成。
由於能力有限,在這裡只能實現乙個很簡單的命令列指令碼,而且...bug很多:比如說之間按回車鍵會出現死迴圈,比如說第乙個字串不是正確的命令時也不會報錯,但是如果是第二個往後的字串是錯誤的就會報錯....(很神奇,我也不知道為什麼...還望各路大佬多多指教~)
#怎樣編寫乙個shell 指令碼
1.獲取命令列
2.解析命令列
3.建立乙個子程序
4.替換子程序(execvp)
5.父程序等待子程序(wait)
#**
#include#include#include#include#includeint argc=0;
char*argv[32];
//獲取命令列字串
int param_parse(char* buff)
char* ptr=buff;
char* tmp=ptr;
while((*ptr)!='\0')
ptr++;
}argv[argc++]=tmp;
argv[argc]=null;
return 0;
} 函式替換
int exec_cmd()
else if(pid==0)
int statu;
wait(&statu);
//判斷子程序是否是**執行完畢退出
if(wifexited(statu))
return 0;
} int main()
; //%[^\n]獲取資料直到遇到\n為止
//%*c 清空緩衝區,資料都不要了
實現乙個簡易的執行緒池。
定義四個類 乙個內部類 乙個任務類 乙個測試類 乙個執行緒池類包含乙個內部類。任務類 任務類,檢查埠。author administrator public class scannertask public void starttask catch unknownhostexception e ca...
linux下實現檔案轉移的sh指令碼
實現目標 cn目錄下有若干資料夾,並且每個資料夾中有一系列以cn開頭的子資料夾,現要求將cn開頭的這些子資料夾實現按資料夾名進行組織存放,例如將 home cn temp cn20081478023的資料夾存放到 home cn 2008 1478 cn20081478023,則shell命令如下 ...
C 實現乙個簡易的執行緒池
工作中需要用到多執行緒,就簡單實現了乙個簡易的執行緒池,直接上 記錄一下 ifndef threadpool h define threadpool h include include include include include include class threadpool endif th...