Shell命令编写——shell第二版,让shell活下去,新进程装载命令

#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;

}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值