execvp.c

来自「cygwin, 著名的在win32下模拟unix操作系统的东东」· C语言 代码 · 共 70 行

C
70
字号
/* execvp.c *//* This and the other exec*.c files in this directory require    the target to provide the _execve syscall.  */#include <_ansi.h>#include <stdlib.h>#include <unistd.h>#include <dirent.h>#include <string.h>#include <errno.h>#include <ctype.h>#define PATH_DELIM ':'/* * Copy string, until c or <nul> is encountered. * NUL-terminate the destination string (s1). */static char *_DEFUN (strccpy, (s1, s2, c),	char *s1 _AND	char *s2 _AND	char c){  char *dest = s1;  while (*s2 && *s2 != c)    *s1++ = *s2++;  *s1 = 0;  return dest;}int_DEFUN (execvp, (file, argv),	_CONST char *file _AND	char * _CONST argv[]){  char *path = getenv ("PATH");  char buf[MAXNAMLEN];  /* If $PATH doesn't exist, just pass FILE on unchanged.  */  if (!path)    return execv (file, argv);  /* If FILE contains a directory, don't search $PATH.  */  if (strchr (file, '/')      )    return execv (file, argv);  while (*path)    {      strccpy (buf, path, PATH_DELIM);      /* An empty entry means the current directory.  */      if (*buf != 0 && buf[strlen(buf) - 1] != '/')	strcat (buf, "/");      strcat (buf, file);      if (execv (buf, argv) == -1 && errno != ENOENT)	return -1;      while (*path && *path != PATH_DELIM)	path++;      if (*path == PATH_DELIM)	path++;			/* skip over delim */    }  return -1;}

⌨️ 快捷键说明

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