Linux基础6--MyShell
程序员文章站
2022-07-12 12:18:41
...
#include<stdio.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<string.h>
#include<ctype.h>
#include<unistd.h>
void do_shell(int argc,char *argv[])
{
pid_t pid = fork();
if(pid == 0){
if(execvp(argv[0],argv) == -1)
{
perror("execvp");
exit(1);
}
}else
wait(NULL);
}
void do_parse(char *buf)
{
int argc = 0;
char *argv[8];
int i;
int status = 0;
for(i=0;buf[i]!=0;i++){
if(!isspace(buf[i]) && status ==0){
argv[argc++] = &buf[i];
status =1;
}else if(isspace(buf[i])){
status = 0;
buf[i] = 0;
}
}
argv[argc] = NULL;
do_shell(argc,argv);
}
int main()
{
char buf[1024] = {};
while(1){
memset(buf,0x00,sizeof(buf));
printf("TSL_shell:");
scanf("%[^\n]%*c",buf);
if(strncmp(buf,"exit",4) == 0)
exit(0);
do_parse(buf);
}
}
上一篇: 【Linux】一些好玩的shell脚本