首先要了解shell:
shell用fork建⽴新进程,⽤execv函数簇在新进程中运⾏⽤户指 定的程序,最后shell⽤wait命令等待新进程结束。wait系统调 ⽤同时从内核取得退出状态或者信号序号以告知⼦进程是如何结束的。 以下就是实现了简单的shell:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
#define MAXSIZE 100
int argc=0;
char *argv[8];
int main(void)
{
//输入字符串
char buf[MAXSIZE];
while(1){
printf("shell >");//输入提示符
memset(buf,0x00,1024);
if(fgets(buf,MAXSIZE,stdin)==NULL)
break;
buf[strlen(buf)-1]='\0';
printf("[%s]",buf);
//解析字符串
int flag=0;
int i=0;
for(i=0;buf[i]!='\0';i++){
if(!isspace(buf[i])&&flag==0){//表示一个单词的开始
flag=1;
argv[argc++]=buf+i;
}
if(isspace(buf[i])&&flag==1){//表示一个单词的结束
flag=0;
buf[i]='\0';
}
}
//执行命令
argv[argc]==NULL;//字符串解析完成
int j=0;
for(j=0;argv[j];j++){
printf("argv[%d]:%s",j,argv[j]);
}
if(fork()==0){//代表子进程
execvp(argv[0],argv);
exit(0);
}
else{
wait(NULL);//回收
}
}
printf("拜拜");
}