实现的功能
1.获取命令行
2.解析命令行
3.建立一个子进程
4.替换子进程
5.父进程等待子进程退出
代码如下:
1 #include <unistd.h>
2 #include <sys/wait.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <string.h>
6
7 char *argv[8];
8 int argc=0;
9
10 void do_parse(char *buf)
11 {
12 int i;
13 int status=0;
14 for(argc=i=0;buf[i];i++)
15 {
16 if(!isspace(buf[i])&&status == 0)
17 {
18 argv[argc++]=buf+i;
19 status=1;
20 }
21 else if(isspace(buf[i]))
22 {
23 status=0;
24 buf[i]=0;
25 }
26 }
27 argv[argc]=NULL;
28 }
29
30 void do_execute(void)
31 {
32 pid_t pid=fork();
33 switch(pid)
34 {
35 case -1:
36 perror("fork");
37 exit(EXIT_FAILURE);
38 break;
39 case 0:
40 execvp(argv[0],argv);
41 perror("execvp");
42 exit(EXIT_FAILURE);
43 dafault:
44 {
45 int st;
46 while(wait(&st)!=pid)
47 ;
48 }
49 }
50 }
51
52 int main()
53 {
54 char buf[1024]={};
55 while(1)
56 {
57 printf("myshell>");
58 scanf("%[^\n]%*c",buf);
59 do_parse(buf);
60 do_execute();
61 }
62 }