linux简单命令解释器设计,实现简单的shell 实现一个简单的shell(命令行解释器),类似于bash, csh等。本设计的主要目的在于学会如...

满意答案

00e27ab806e4881f8254fe7ae8741834.png

atmcleaner

2013.08.26

00e27ab806e4881f8254fe7ae8741834.png

采纳率:48%    等级:12

已帮助:9682人

#include

#include

#define MAXARGS 20 /* cmdline args */

#define ARGLEN 100 /* token length */

main()

{

char *arglist[MAXARGS+1]; /* an array of ptrs */

int numargs; /* index into array */

char argbuf[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 )

{

arglist[numargs]=NULL; /* close list*/

execute( arglist ); /* do it */

numargs = 0; /* and reset*/

}

}

}

return 0;

}

execute( char *arglist[] )

{

int pid,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, *malloc();

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 */

}

01分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值