自主实现简单的minishell:命令行解释器
- 捕捉用户键盘输入 [ ls -a -l ] – char *gets(char *s)
- 解析输入信息–得到命令名称,运行参数[ls] [-a] [-l]
- 创建子进程,给子进程通过命令名称进行程序替换(让子进程运行命令)
- 进程等待,等待子进程退出,防止出现僵尸进程
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
#include<string.h>
#include<ctype.h>
int main(int argc, char *argv[])
{
while(1)
{
printf("[minishell]$ ");
fflush(stdout);
char cmd[1024] = {
0};
fgets(cmd, 1023, stdin);
cmd[strlen(cmd) - 1] = '\0';
char *ptr = cmd;
char *arg[32] = {
NULL};
int ac = 0;
while(*ptr != '\0')
{
if(!isspace(*ptr))
{
arg[ac++]=ptr;
while((!isspace(*ptr)) && (*ptr) != '\0')
ptr++;
*ptr = '\0';
}
ptr++;
}
arg[ac]=NULL;
if(strcmp(arg[0], "cd") == 0)
{
chdir(arg[1]);
continue;
}
pid_t pid = fork();
if(pid<0)
{
continue;
}
else if(pid ==0)
{
execvp(arg[0], arg);
exit(-1);
}
wait(NULL);
}
return 0;
}