本文共 1373 字,大约阅读时间需要 4 分钟。
#include#include #include //保存字符的ASCII码值#include #include #include char g_command[1024];//从标准输入当中获取命令int GetCommand(){ //清空字数组 memset(g_command,'\0',sizeof(g_command)); //gets()存在bug,并不会控制读多少数据 //按行读取 printf("[sky@localhost minshell]$ "); //刷新缓冲区 fflush(stdout); //-1是为\0预留位置 if(fgets(g_command,sizeof(g_command)-1,stdin)==NULL) { printf("fgets error\n"); return -1; } return 0;}int ExecCommand(char* argv[]){ if(argv[0]==NULL) { printf("ExecCommand error\n"); return -1; } pid_t pid=fork(); if(pid<0) { printf("create subprocess fail\n"); return -1; } else if(pid==0) { execvp(argv[0],argv); //万一替换失败,一定要杀掉 exit(0); } else { waitpid(pid,NULL,0); } return 0;} int DealCommand(char* command){ //差错控制,排除无效参数 if(!command && *command=='\0') { printf("command error\n"); return -1; } //拆分命令 int argc=0; char* argv[1024]={ 0}; while(*command) { while(!isspace(*command) && *command!='\0') { //argv[0]=ls\0-al argv[argc]=command; argc++; while(!isspace(*command) && *command != '\0') { command++; } *command='\0'; } command++; } argv[argc]=NULL; for(int i=0;i
转载地址:http://afowi.baihongyu.com/