#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
char *argv[8];
int argc = 0;
void do_shell()
{
pid_t pid;
if((pid == fork()) == -1){
peeror("fork");
exit(EXIT_FAILURE);
}
if(pid == 0){
execvp(argv[0],argv);
perror("execvp");
}else{
int st;
pid_t ret = wait(&st);
if(ret == -1){
perror("wait error");
exit(-1);
}
}
}
void do_par(char *buf)
{
int start = 0;
int i = 0;
argc = 0;
while(buf[i]){
if(!isspace(buf[i]) && start == 0){
argv[argc++] = buf+i;
start = 1;
}
else if(isspace(buf[i]) && start == 1){
start = 0;
buf[i] = '\0';
}
i++;
}
argv[argc++] = NULL;
}
int main()
{
char buf[1024];
while(1){
printf("myshell->");
scanf("%[^\n]%*c",buf);
do_par(buf);
do_shell();
}
}
自主实现简单的shell
最新推荐文章于 2020-08-18 17:08:18 发布