1.基本思路:
2.具体代码实现:
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<sys/wait.h>
char *argv[10];//数组指针
int argc;
void do_parse(char stringshell[])
{
int i;
int status=0;
for(argc=i=0;stringshell[i];i++)
{
if(!isspace(stringshell[i])&&status==0)
{
argv[argc++]=stringshell+i;//数组指针成员元素指向stringshell
status=1;
}
else if(isspace(stringshell[i]))
{
stringshell[i]=0;
status=0;
}
}
argv[argc]=NULL;
}
do_exedute()
{
pid_t pid=fork();
switch(pid)
{
case -1:
perror("fork");
exit(EXIT_FAILURE);
break;
case 0:
execvp(argv[0],argv);
perror("execvp");
exit(EXIT_FAILURE);
break;
default:
{
int stu;
while(wait(&stu)!=pid)
{
;
}
break;
}
}
}
int main()
{
while(1)
{
char stringshell[100]={0};
printf("my shell->> ");
scanf("%[^\n]%*c",stringshell);//输入一行不是换行的字符串,读入一个字符
if(stringshell[0]==0&&getchar()=='\n')
{
continue;
}
do_parse(stringshell);
do_exedute();
}
return 0;
}