📄 shell.c
字号:
#include <unistd.h>#include <stdio.h>#define MAX_CMD 100int main(){ int pid,ppid; int i,j,jj,kk,k,len,tag,ptag,pipetag; char cmd[10][10]; char pcmd[10][10]; char *pargv[10]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}; char *argv[10]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}; char buffer[100]; char *file,*pfile; char* tip="kxz_shell# "; int fds[2]; char pipebuf[12]={'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0','\0'}; printf("\nWelcome to kxz_shell!\nDeveloped by Kong Xiangzhen 03055078 jsj33\n\n ");again: pipetag=0; for(i=0;i<10;i++) { argv[i]=NULL; } if((len=write(1,tip,11))<0) { perror("write error!"); exit(0); } if((len=read(0,buffer,sizeof(buffer)))<0) { perror("read error!"); exit(0); } i=0; j=0; jj=0; k=0; kk=0; while(i<len-1) { while((buffer[i]!=' '&&buffer[i]!='|')&&i<len-1) { cmd[j][k]=buffer[i]; i++; k++; } cmd[j][k]='\0'; argv[j]=cmd[j]; printf("cmd %d=%s**\n",j,cmd); if(buffer[i]==' ') { while(buffer[i]==' ') i++; k=0; j++; } if(buffer[i]=='|') { pipetag=1; i++; while(buffer[i]==' ')i++; while(buffer[i]!=' '&&i<len-1) { pcmd[jj][kk]=buffer[i]; i++; kk++; } pcmd[jj][kk]='\0'; pargv[jj]=pcmd[jj]; printf("pcmd %d=%s**\n",jj,pcmd); } } while((pid=fork())<0); if(pid==0) { printf("pipetag=%d\n",pipetag); if(pipetag==1) { if(pipe(fds)==-1) { perror("Pipe Error"); exit(-1); } while((ppid=fork())<0); if(ppid>0) { close(fds[0]); write(fds[1],"/dev/stdout",11); sleep(3); file=cmd[0]; tag=execvp(file,argv); wait(NULL); } else{ close(fds[1]); read(fds[0],pipebuf,11); printf("recive =%s***\n",pipebuf); pargv[1]=pipebuf; printf("\nThis is out by pipe\n"); pfile=pcmd[0]; ptag=execvp(pfile,pargv); if(ptag<0) printf("Bad command for pipe!\n"); } } file=cmd[0]; tag=execvp(file,argv); if(tag<0) printf("Bad command!\n"); } else{ wait(0); goto again; } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -