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

📄 execvp.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
/* *	execlp(name, arg,...,0)	(like execl, but does path search) *	execvp(name, argv)	(like execv, but does path search) */#include <errno.h>#define	NULL	0static	char shell[] =	"/bin/sh";char	*execat(), *getenv();extern	errno;execlp(name, argv)char *name, *argv;{	return(execvp(name, &argv));}execvp(name, argv)char *name, **argv;{	char *pathstr;	register char *cp;	char fname[128];	char *newargs[256];	int i;	register unsigned etxtbsy = 1;	register eacces = 0;	if ((pathstr = getenv("PATH")) == NULL)		pathstr = ":/bin:/usr/bin";	cp = index(name, '/')? "": pathstr;	do {		cp = execat(cp, name, fname);	retry:		execv(fname, argv);		switch(errno) {		case ENOEXEC:			newargs[0] = "sh";			newargs[1] = fname;			for (i=1; newargs[i+1]=argv[i]; i++) {				if (i>=254) {					errno = E2BIG;					return(-1);				}			}			execv(shell, newargs);			return(-1);		case ETXTBSY:			if (++etxtbsy > 5)				return(-1);			sleep(etxtbsy);			goto retry;		case EACCES:			eacces++;			break;		case ENOMEM:		case E2BIG:			return(-1);		}	} while (cp);	if (eacces)		errno = EACCES;	return(-1);}static char *execat(s1, s2, si)register char *s1, *s2;char *si;{	register char *s;	s = si;	while (*s1 && *s1 != ':' && *s1 != '-')		*s++ = *s1++;	if (si != s)		*s++ = '/';	while (*s2)		*s++ = *s2++;	*s = '\0';	return(*s1? ++s1: 0);}

⌨️ 快捷键说明

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