shell.c

来自「unix下一个实现带参数的简单shell的程序」· C语言 代码 · 共 58 行

C
58
字号
#include <sys/wait.h>#include "ourhdr.h"#include "error.c"#define MAXARG 10char *argv[MAXARG];void sig_int(int signo){	printf("interrupt\n");	exit(1);}void create_argv(char *buf){	int len=strlen(buf);	int i,j=1;	for(i=0;i<len;i++)	{		if(buf[i]=='\0'||i==(len-1))			buf[i]=0;		else if(i>0 && buf[i-1]==0)		{			if(j>=MAXARG)				err_sys("to many arguments");			argv[j]=buf+i;			j++;		}	}	if(j>=MAXARG)		err_sys("too many arguments");	argv[j]=0;	argv[0]=buf;}	int main(void){	char buf[MAXLINE];	char *envp[]={"PATH=/bin:/usr/bin:/usr/local/bin:",0};	pid_t pid;	int status,j,len;	if(signal(SIGINT,sig_int)==SIG_ERR)		err_sys("signal error");	printf("%%");	while(fgets(buf,MAXLINE,stdin)!=NULL)	{		create_argv(buf);		if((pid=fork())<0)			err_sys("fork error");		else if(pid==0)		{			execve(buf,argv,envp);			err_ret("couldn't execve:%s",buf);			exit(127);		}		if((pid=waitpid(pid,&status,0))<0)			err_sys("waitpid error");		printf("%%");	}	exit(0);	}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?