结合进程替换的内容,我们可以自己实现一个简单的shell,shell是命令行解释器
- #include
- #include
- #include
- #include
- #include
- #define MAX_C 128
- #define MAX_CMD 32
- int main()
- {
- char command[MAX_C] = "";
- for(;;)
- {
-
- command[0] = '\0'; //使我们的command用O(1)的时间复杂度来完成重置
- printf("[fengjunzi@VM-4-2-centos mydir]# ");
- fflush(stdout); //刷新输出缓冲区
- fgets(command,MAX_C,stdin);
- command[strlen(command) - 1] = '\0';
-
-
-
-
- //解析字符串中的指令放入指针数组
- char* argv[MAX_CMD] = {NULL};
- const char* sep = " ";
- argv[0] = strtok(command,sep);
- int i = 1;
- while(argv[i] = strtok(NULL,sep))
- {
- ++i;
- }
-
-
- //需要shell 本身执行的命令 -- 内建命令
- if(strcmp("cd",argv[0]) == 0)
- {
- if(argv[1] != NULL)
- {
- chdir(argv[1]);
- }
- continue;
- }
-
-
- //进程替换
- if(fork() == 0)
- {
- //child
- execvp(argv[0],argv);
- exit(-1);
- }
- wait(NULL);
- //printf("%s\n",command);
- }
- return 0;
- }