shell是什么?shell可以理解為作業系統內核與用戶之間的橋梁,是一個命令列解釋器程式,shell程式有很多種,例如:bash、dash、csh等,如果我們想要實作一個簡單的shell程式,我們可以分為以下幾步:
- 捕捉鍵盤輸入 sacnf/gets
- 獲取鍵盤輸入的資料 eg:[ ls -l -a]
- 字串格式決議(以空白字符為間隔,分割成一個一個的字串,去掉空白字符,變成 [ls] [-l] [-a])
- 為shell程式創建一個子行程
- 在子行程中進行程式替換,替換為ls程式
- 行程等待,等待子行程退出
代碼如下:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
int main(int argc,char *argv[])
{
while(1){
printf("[danggui@location]$");
fflush(stdout);
char tmp[1024]={0};
scanf("tmp"); //捕獲鍵盤輸入
//決議字串
char *argv[32]={NULL};
int argc = 0;
char *ptr = tmp;
while(*ptr != '\0'){
if(!isspace(*ptr)){
argv[argc] = ptr;
argc++;
while(!isspace(ptr) && *ptr != '\0')ptr++;
*ptr = '\0';
}
ptr++;
}
argv[argc] = NULL;
//創建子行程
pid_t pid = fork();
if (pid < 0){
perror("fork error");
return -1;
}
else if(pid == 0){
execvp(argv[0],argv); //程式替換
exit(0);
}
wait(NULL); //行程等待
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/267018.html
標籤:其他
