📄 main.c
字号:
#include"stdio.h"#include"string.h"#include"malloc.h"#include"unistd.h"#include"stdlib.h"#include"sys/types.h"#include"sys/wait.h"#define BUFFERSIZE 255char buffer[BUFFERSIZE+1];int is_fileexist(char *comm);int main(){ char *path; while(1) { path = get_current_dir_name(); printf("%s>$",path); char lc_char; int li_inputlen = 0; char *input; lc_char = getchar(); while(lc_char != '\n' && li_inputlen < BUFFERSIZE){ buffer[li_inputlen++] = lc_char; lc_char = getchar(); } if(li_inputlen >= BUFFERSIZE){ printf("Your command is too long!Please re-enter your command!<=%d\n",BUFFERSIZE); li_inputlen = 0; continue ; } if(li_inputlen == 0) continue ; else buffer[li_inputlen] = '\0'; input = (char*) malloc(sizeof(char) * (li_inputlen+1)); strcpy(input,buffer); int i; int j; int k; int is_bj = 0; int is_back = 0; int pid; int status; char *arg[20]; for(i = 0,j =0, k = 0;i <= li_inputlen;i++){ if(input[i] =='<' || input[i] =='>' || input[i] == '|'){ if(input[i] == '|') printf("command is not supported!"); else printf("command is not supported!"); is_bj = 1; break ; } if(input[i] ==' ' || input[i] =='\t' || input[i] =='\0'){ if(j == 0) continue; else{ buffer[j++]='\0'; arg[k] = (char *)malloc(sizeof(char)*j); strcpy(arg[k],buffer); j = 0; k++; } } else{ if(input[i] == '&' && input[i+1] == '\0'){ is_back = 1; continue ; } buffer[j++] = input[i]; } } free(input); if(strcmp(arg[0],"leave") ==0){ printf("bye-bye\n"); break ; } if(strcmp(arg[0],"cd") ==0) { if(k ==1) continue ; if(k >2) printf("parameter error!\n"); else if(chdir(arg[1]) ==-1) printf("path error!\n"); continue ; } if(is_bj ==0){ arg[k] = (char *) 0; if(is_fileexist(arg[0]) == -1){ printf("This command is not found?!\n"); for(i = 0;i < k; i++) free(arg[i]); continue ; } else{ if((pid = fork()) ==0) execv(buffer,arg); else if(is_back == 0) waitpid(pid,&status,0); for(i = 0;i <k; i++) free(arg[i]); } } } return 0;}int is_fileexist(char *comm){ char *path,*p; int i; i=0; path = getenv("PATH"); p = path; while(*p != '\0'){ if(*p != ':') buffer[i++] = *p; else{ buffer[i++] = '/'; buffer[i] = '\0'; strcat(buffer,comm); if(access(buffer,F_OK) ==0) return 0; else i = 0; } p++; } return -1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -