什么是shell
Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它接收用户命令,然后调用相应的应用程序。
编写思路
- 捕捉键盘输入的信息。
- 解析输入信息:将键盘的输入信息解析成 命令名称+运行参数
- 创建子进程:让子进程运行对应名称的程序。(程序替换)
- 等待子进程退出。
代码实现
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
int main ()
{
while(1)
{
//从键盘捕捉输入信息
printf("[user@host]$");
fflush(stdout);
char buf[1024]={0};
fgets(buf, 1024, stdin);
//获取到键盘输入信息,将buf首地址存入ptr中
int myargc = 0;
char *ptr = buf;
char *myargv = {NULL};
buf[strlen(buf)-1] = '\0';
//解析字符串,将一整串字符串解析成 命令名称+运行参数
while(*ptr != '\0')
{
if(*ptr != ' ')
{
myargv[myargc] = ptr;
myargc++;
while(*ptr != '\0' && *ptr != ' ')
{
ptr++;
}
*ptr = '\0';
}
ptr++;
}
myargv[myargc] = NULL;
//创建子进程,完成程序替换,让子进程运行我们解析出来的命令
pid_t pid = fork();
if (pid < 0)
{
perror("fork error")
continue;
}
if (pid == 0)
{
execvp(myargv[0], myargv,);
perror("execvp error");
exit(-1);
}
//父进程等待子进程退出,避免产程僵尸进程
wait(NULL);
}
return 0;
}