Описание тега execvp
execvp - это функция POSIX, изexec*
family, которая заменяет текущий процесс указанным.
Он доступен практически на всех UNIX-подобных платформах, включая Linux и Mac OS X, где unistd.h
файл существует, и многие языки, такие как Python, эмулируют эту функцию на таких платформах, как Windows, где эта функция обычно не существует. Многие языки, включая C, C++ и Python, имеют интерфейсы для этой функции.
В случае успеха он не вернется, и текущий процесс будет заменен. Если это не удастся, он вернет -1.
POSIX указывает, что эта функция имеет подпись:
int execvp(const char *path, char *const argv[]);
.
Его аргументы интерпретируются следующим образом:
путь: это строка с завершающим нулем, содержащая имя исполняемого файла. Указывается, что execvp будет искать переменную среды PATH для этого имени, если это не путь.
Если это путь, то execvp будет искать исполняемый файл там, где он указан, используя абсолютный путь, если этот аргумент начинается с
/
, или относительный, если этого аргумента нет.
Пример: ping
решит /bin/ping
.
argv: это массив строк с завершающим NULL, которые составляют
argv
процесса вpath
аргумент.Этот массив должен заканчиваться NULL и начинаться с имени исполняемого файла, переданного в
path
аргумент.
Пример: {"ping", "-c", "5", "www.google.com", NULL}
POSIX включает следующий полный пример для справки:
В следующем примере показано использование execvp для выполнения
ls
команда оболочки:#include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> main() { pid_t pid; char *const parmList[] = {"/bin/ls", "-l", "/u/userid/dirname", NULL}; if ((pid = fork()) == -1) perror("fork() error"); else if (pid == 0) { execvp("ls", parmList); printf("Return not expected. Must be an execvp() error.\n"); } }