⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shell.c

📁 unix下一个实现带参数的简单shell的程序
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -