结合进程替换的内容,我们可以自己实现一个简单的shell,shell是命令行解释器
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<string.h>
#include<stdlib.h>
#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){//childexecvp(argv[0],argv);exit(-1);}wait(NULL);//printf("%s\n",command);}return 0;
}