Execute linux что это

exec(3) — Linux man page

int execl(const char *path, const char *arg, . );
int execlp(const char *
file, const char *arg, . );
int execle(const char *
path, const char *arg,
. char * const
envp[]);
int execv(const char *
path, char *const argv[]);
int execvp(const char *
file, char *const argv[]);
int execvpe(const char *
file, char *const argv[],
char *const
envp[]);

Feature Test Macro Requirements for glibc (see feature_test_macros(7)): execvpe(): _GNU_SOURCE

Description

The exec() family of functions replaces the current process image with a new process image. The functions described in this manual page are front-ends for execve(2). (See the manual page for execve(2) for further details about the replacement of the current process image.)

The initial argument for these functions is the name of a file that is to be executed.

The const char *arg and subsequent ellipses in the execl(), execlp(), and execle() functions can be thought of as arg0, arg1, . argn. Together they describe a list of one or more pointers to null-terminated strings that represent the argument list available to the executed program. The first argument, by convention, should point to the filename associated with the file being executed. The list of arguments must be terminated by a NULL pointer, and, since these are variadic functions, this pointer must be cast (char *) NULL.

The execv(), execvp(), and execvpe() functions provide an array of pointers to null-terminated strings that represent the argument list available to the new program. The first argument, by convention, should point to the filename associated with the file being executed. The array of pointers must be terminated by a NULL pointer.

The execle() and execvpe() functions allow the caller to specify the environment of the executed program via the argument envp. The envp argument is an array of pointers to null-terminated strings and must be terminated by a NULL pointer. The other functions take the environment for the new process image from the external variable environ in the calling process.

Читайте также:  Find в терминале linux

Special semantics for execlp() and execvp() The execlp(), execvp(), and execvpe() functions duplicate the actions of the shell in searching for an executable file if the specified filename does not contain a slash (/) character. The file is sought in the colon-separated list of directory pathnames specified in the PATH environment variable. If this variable isn’t defined, the path list defaults to the current directory followed by the list of directories returned by confstr(_CS_PATH). (This confstr(3) call typically returns the value «/bin:/usr/bin».)

If the specified filename includes a slash character, then PATH is ignored, and the file at the specified pathname is executed.

In addition, certain errors are treated specially.

If permission is denied for a file (the attempted execve(2) failed with the error EACCES), these functions will continue searching the rest of the search path. If no other file is found, however, they will return with errno set to EACCES.

If the header of a file isn’t recognized (the attempted execve(2) failed with the error ENOEXEC), these functions will execute the shell (/bin/sh) with the path of the file as its first argument. (If this attempt fails, no further searching is done.)

Return Value

The exec() functions only return if an error has occurred. The return value is -1, and errno is set to indicate the error.

Errors

All of these functions may fail and set errno for any of the errors specified for execve(2).

Versions

The execvpe() function first appeared in glibc 2.11.

Conforming To

The execvpe() function is a GNU extension.

Notes

On some other systems, the default path (used when the environment does not contain the variable PATH) has the current working directory listed after /bin and /usr/bin, as an anti-Trojan-horse measure. Linux uses here the traditional «current directory first» default path.

Читайте также:  Error 110 usb linux

The behavior of execlp() and execvp() when errors occur while attempting to execute the file is historic practice, but has not traditionally been documented and is not specified by the POSIX standard. BSD (and possibly other systems) do an automatic sleep and retry if ETXTBSY is encountered. Linux treats it as a hard error and returns immediately.

Traditionally, the functions execlp() and execvp() ignored all errors except for the ones described above and ENOMEM and E2BIG, upon which they returned. They now return if any error other than the ones described above occurs.

Источник

Execute linux что это

Функция exec() (execute) загружает и запускает другую программу. Таким образом, новая программа полностью замещает текущий процесс. Новая программа начинает свое выполнение с функции main . Все файлы вызывающей программы остаются открытыми. Они также являются доступными новой программе. Используется шесть различных вариантов функций exec .

#include int execl(char *name, char *arg0, . /*NULL*/); int execv(char *name, char *argv[]); int execle(char *name, char *arg0, . /*,NULL, char *envp[]*/); int execve(char *name, char *arv[], char *envp[]); int execlp(char *name, char *arg0, . /*NULL*/); int execvp(char *name, char *argv[]);

  • l (список). Аргументы командной строки передаются в форме списка arg0, arg1. argn, NULL . Эту форму используют, если количество аргументов известно;
  • v (vector). Аргументы командной строки передаются в форме вектора argv[] . Отдельные аргументы адресуются через argv [0], argv [1]. argv [n] . Последний аргумент ( argv [n] ) должен быть указателем NULL ;
  • p (path). Обозначенный по имени файл ищется не только в текущем каталоге, но и в каталогах, определенных переменной среды PATH ;
  • e (среда). Функция ожидает список переменных среды в виде вектора ( envp [] ) и не использует текущей среды.

#include int main(int argc, char *argv[])

Эта программа выводит на экран строку, переданную ей в качестве аргумента. Пусть она называется hello . Она будет вызвана из другой программы с помощью функции execl() . Код вызывающей программы приведен ниже :

#include #include int main(int argc, int *argv[])

В строке execl() аргументы указаны в виде списка. Доступ к ним также осуществляется последовательно. Если использовать функцию execv() , то вместо списка будет указан вектор аргументов:

#include #include int main(int argc, int *argv[])

Источник

Execute linux что это

NAME

exec - execute commands and open, close, or copy file descriptors

SYNOPSIS

exec [command [argument . ]] 

DESCRIPTION

The exec utility shall open, close, and/or copy file descriptors as specified by any redirections as part of the command. If exec is specified without command or arguments, and any file descriptors with numbers greater than 2 are opened with associated redirection statements, it is unspecified whether those file descriptors remain open when the shell invokes another utility. Scripts concerned that child shells could misuse open file descriptors can always close them explicitly, as shown in one of the following examples. If exec is specified with command, it shall replace the shell with command without creating a new process. If arguments are specified, they shall be arguments to command. Redirection affects the current shell execution environment.

OPTIONS

OPERANDS

STDIN

INPUT FILES

ENVIRONMENT VARIABLES

ASYNCHRONOUS EVENTS

STDOUT

STDERR

The standard error shall be used only for diagnostic messages.

OUTPUT FILES

EXTENDED DESCRIPTION

EXIT STATUS

If command is specified, exec shall not return to the shell; rather, the exit status of the process shall be the exit status of the program implementing command, which overlaid the shell. If command is not found, the exit status shall be 127. If command is found, but it is not an executable utility, the exit status shall be 126. If a redirection error occurs (see Consequences of Shell Errors ), the shell shall exit with a value in the range 1-125. Otherwise, exec shall return a zero exit status.

CONSEQUENCES OF ERRORS

Default. The following sections are informative. 

APPLICATION USAGE

EXAMPLES

Open readfile as file descriptor 3 for reading: exec 3 readfile Open writefile as file descriptor 4 for writing: exec 4> writefile Make file descriptor 5 a copy of file descriptor 0: exec 5 Close file descriptor 3: exec 3 Cat the file maggie by replacing the current shell with the cat utility: exec cat maggie 

RATIONALE

Most historical implementations were not conformant in that: foo=bar exec cmd did not pass foo to cmd.

FUTURE DIRECTIONS

SEE ALSO

Special Built-In Utilities 

© 2019 Canonical Ltd. Ubuntu and Canonical are registered trademarks of Canonical Ltd.

Источник

Оцените статью
Adblock
detector