#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活下去,新进程装载命令
最新推荐文章于 2025-02-04 22:11:35 发布
这是一个关于技术领域的博客,涵盖了从前端到后端开发、移动开发、游戏开发、大数据、AI等多方面的内容。
2479

被折叠的 条评论
为什么被折叠?



