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;
}