各位看官們,大家好,上一回中咱們說的是字符串初始化的例子,這一回咱們說的例子是:DIY shell。閒話休提,言歸正轉。讓我們一起talk C栗子吧!
看官們,我們每天都在使用shell,而且似乎已經離不開它了。這是前輩們留給我們的好東東。今天我們介紹如何DIY一個shell,算是向前輩的致敬吧。
我們DIY的思路如下:
1.輸入一個類似$的字符,提示用戶向終端中輸入內容; 2.從終端中讀取用戶輸入的命令; 3.判斷用戶輸入的命令,並且執行相應的命令; 4.重復步驟1到3,直到用戶輸入exit命令時,結束程序,退出shell。下面是我寫的shell程序的簡單框架,請大家參考:
int main(int argc, char *argv[])
{
char buf[BUF_SIZE];
int res = 1;
int flag = 1;
int index = 0;
while(flag) // do this untial input exit commond
{
printf("|->");
if(NULL == fgets(buf,BUF_SIZE,stdin)) // get the input
return 0;
index = sizeof(input)/sizeof(input_type);
while(index-- > 0)
{
res = strncmp(buf,input[index].str,input[index].size); // find the commond
if(res == 0)
{
switch(index)
{
case 0: // exec exit commond
flag = 0;
break;
case 1: // exec cd commond
cds(buf);
break;
case 2: // exec ls commond
lss(buf);
break;
default:
printf("can 's \n");
break;
}
index = -1; // if find the commond, stop finding
}
}
if(index == -1)
printf("can't find commond: %s ",buf);
}
return 0;
}
程序中的cd和ls函數還沒有完全實現。此外,這只是一個簡單的程序框架,很多shell的功能都沒有實現。這些內容,我們會在後面的章節中介紹並且實現。
看官們,正文中就不寫代碼了,詳細的代碼放到了我的資源中,大家可以點擊這裡下載使用。下面是程序的運行結果,請大家參考。在程序中我們使用了“|->”代碼shell中的$,雖然形式不同,但是目的都是為了提示用戶輸入命令。
|->abc //abc is not a commond
can't find commond: abc
|->cd // exec the cd commond
cd running
|->ls // exec the cd commond
ls running
|->exit // exit the shell program
各位看官,關於DIY shell的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解。