#include <stdio.h>
#include <signal.h>
#include <string.h>
#include <stdlib.h>
//命令行的参数个数
#define MAXARGS 20
//长度
#define ARGLEN 100
int main(){
char *arglist[MAXARGS+1];
int numargs;
char argbuf[ARGLEN];
char *makestring();
numargs =0 ;
while(numargs<MAXARGS)
{
printf("Arg[%d]{1}quot;,numargs);
if(fgets(argbuf,ARGLEN,stdin)&&*argbuf!='\n')
arglist[numargs++]=makestring(argbuf);
else{
if(numargs>0){
arglist[numargs]=NULL;
execute(arglist);
numargs = 0;
}
}
}
return 0;
}
int execute(char *arglist[]){
int pid = fork();
int exitstatus;
switch(pid){
case -1:
perror("fork failed");
exit(1);
case 0:
execvp(arglist[0],arglist);
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){
char *cp;
buf[strlen(buf)-1]='\0';
cp =(char *)malloc(strlen(buf)+1);
if(cp == NULL){
fprintf(stderr,"no memory\n");
exit(1);
}
strcpy(cp,buf);
return cp;
}
Shell命令编写——shell第二版,让shell活下去,新进程装载命令
最新推荐文章于 2023-10-28 23:47:22 发布