要写一个shell,需要循环以下过程
- 获取命令行
- 解析命令行
- 建立一个子进程
- 替换子进程
1 #include<stdio.h>
2 #include<string.h>
3 #include <ctype.h>
4 #include<unistd.h>
5 #include <sys/wait.h>
6 #include<stdlib.h>
7 int main(){
8 while(1){
9 printf("[dev@localhost ~]$ ");
10 fflush(stdout);
11 char tmp[1024] = {0};
12 scanf("%[^\n]%*c",tmp);
13 printf("[%s]\n",tmp);
14 //解析命令行
15 char* ptr = tmp;
16 int argc = 0;
17 char* argv[32] = {NULL};
18 while(*ptr!='\0'){
19 if(!isspace(*ptr)){
20 argv[argc] = ptr;
21 argc++;
22 while(!isspace(*ptr)&&*ptr!='\0'){
23 ptr++;
24 }
25 *ptr = '\0';
26 ptr++;
27 continue;
28 }
29 ptr++;
30 }
31 for(int i=0; i<argc;++i){
32 printf("argv[%d] = [%s]\n",i,argv[i]);
33 }
34 argv[argc] = NULL;
35 if(!strcmp(argv[0],"cd")){
36 //改变当前工作路径
37 chdir(argv[1]);
38 continue;
39 }
40 //建立一个子进程,替换子进程
41 int pid = fork();
42 if(pid == 0){
43 execvp(argv[0],argv);
44 exit(0);
45 }
46 //等待子进程退出,避免出现僵尸进程
47 wait(NULL);
48 }
49 return 0;
50 }