linux中模拟sh.c

来源:互联网 发布:pmp含金量 知乎 编辑:程序博客网 时间:2024/06/10 06:04
#include<stdlib.h>#include<string.h>#include<stdio.h>#include<signal.h>#defineMAXARGS20/* cmdline args*/#defineARGLEN100/* token length*/main(){char*arglist[MAXARGS+1];/* an array of ptrs*/intnumargs;/* index into array*/charargbuf[ARGLEN];/* read stuff here*/char*makestring();/* malloc etc*/numargs = 0;while ( numargs < MAXARGS ){printf("Arg[%d]? ", numargs);if ( fgets(argbuf, ARGLEN, stdin) && *argbuf != '\n' )arglist[numargs++] = makestring(argbuf);else{if ( numargs > 0 ){/* any args?*/arglist[numargs]=NULL;/* close list*/execute( arglist );/* do it*/numargs = 0;/* and reset*/}}}return 0;}execute( char *arglist[] )/* *use fork and execvp and wait to do it */{intpid,exitstatus;/* of child*/pid = fork();/* make new process */switch( pid ){case -1:perror("fork failed");exit(1);case 0:execvp(arglist[0], arglist);/* do it */perror("execvp failed");exit(1);default:while( wait(&exitstatus) != pid );printf("child exited with status %d,%d\n",exitstatus>>8, exitstatus&0377);}}char *makestring( char *buf )/* * trim off newline and create storage for the string */{char*cp;buf[strlen(buf)-1] = '\0';/* trim newline*/cp = malloc( strlen(buf)+1 );/* get memory*/if ( cp == NULL ){/* or die*/fprintf(stderr,"no memory\n");exit(1);}strcpy(cp, buf);/* copy chars*/return cp;/* return ptr*/}

阅读全文
0 0
原创粉丝点击