编写自己的shell程序主要就是程序替换,使用了进程等待、进程终止、进程创建等进程控制的方法
#include <stdio.h>
2 #include <unistd.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <sys/wait.h>
6 #include <ctype.h>
7
8 int main()
9 {
10 while(1)
11 {
12 printf("[username@localhost]$ ");
13 fflush(stdout);
14 char cmd_buf[1024] = { 0 };
15 fgets(cmd_buf,1023,stdin);//从标准输入读取信息
16 cmd_buf[strlen(cmd_buf) - 1] = '\0';
17 printf("cmd:[%s]\n",cmd_buf);
18
19 char * argv[32] = {NULL};
20 int argc = 0;
21 char *ptr = cmd_buf;
22 while(*ptr != '\0')
23 {
24 if(!isspace(*ptr))
25 {
26 argv[argc] = ptr;
27 argc++;
28 while(!isspace(*ptr) && *ptr != '\0') ptr++;
29 *ptr = '\0';
30 }
31 ptr++;
32 }
33 argv[argc] = NULL;
34 int i;
for(i = 0;i < argc;i++)
36 {
37 printf("argv[%d] = %s\n",argc,argv[argc]);
38 }
39 //第二步
40 pid_t pid = fork();
41 if(pid < 0)
42 {
43 continue;
44 }
45 else if(pid == 0)
46 {
47 execvp(argv[0],argv);
48 //若程序替换失败,因子父进程的一致,则会出现两个shell,因此使用exit终止该进程。
49 exit(0);
50 }//第三步
51 wait(NULL);//第四步
52
53 return 0;
54
55 }
56 }