自主实现简单的shell
程序员文章站
2022-07-12 09:56:13
...
#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();
}
}
上一篇: 好的软件人员一生必看的六十本书
下一篇: 函数的栈帧创建与销毁