Man page - execveat(2)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

execveat

НАИМЕНОВАНИЕ
БИБЛИОТЕКА
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
СТАНДАРТЫ
ИСТОРИЯ
ПРИМЕЧАНИЯ
ОШИБКИ
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД

НАИМЕНОВАНИЕ

execveat - выполняет программу, определяемую относительно файлового дескриптора каталога

БИБЛИОТЕКА

Стандартная библиотека языка C ( libc , -lc )

ОБЗОР

#include <linux/fcntl.h> /* определения констант AT_* */
#include <unistd.h>

int execveat(int dirfd , const char * pathname ,
char *const _Nullable
argv [],
char *const _Nullable
envp [],
int
flags );

ОПИСАНИЕ

Системный вызов execveat () выполняет программу, на которую ссылается комбинация dirfd и pathname . Он работает также как системный вызов execve (2), за исключением случаев, описанных в данной справочной странице.

Если в pathname задан относительный путь, то он считается относительно каталога, на который ссылается файловый дескриптор dirfd (а не относительно текущего рабочего каталога вызывающего процесса, как это делается в execve (2)).

Если в pathname задан относительный путь и dirfd равно специальному значению AT_FDCWD , то pathname рассматривается относительно текущего рабочего каталога вызывающего процесса (как execve (2)).

Если в pathname задан абсолютный путь, то dirfd игнорируется.

Если pathname — пустая строка и указан флаг AT_EMPTY_PATH , то файловым дескриптором dirfd задаётся выполняемый файл (т. е., dirfd ссылается на исполняемый файл, а не на каталог).

Аргумент flags является битовой маской, которая может включать ноль или более следующих флагов:
AT_EMPTY_PATH

Если значение pathname равно пустой строке, то вызов выполняет действие с файлом, на который ссылается dirfd (может быть получен с помощью open (2) с флагом O_PATH ).

AT_SYMLINK_NOFOLLOW

Если файл задаётся dirfd и pathname — символическая ссылка (не NULL), то вызов завершается с ошибкой ELOOP .

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

On success, execveat () does not return. On error, -1 is returned, and errno is set to indicate the error.

ОШИБКИ

В execveat () могут возникнуть те же ошибки, что и в execve (). Также, в execveat () могут возникнуть следующие ошибки:
pathname

является относительным, но dirfd не является ни AT_FDCWD , ни допустимым файловым дескриптором.

EINVAL

Указано неверное значение в flags .

ELOOP

Значение flags содержит AT_SYMLINK_NOFOLLOW и файл задаётся dirfd , а pathname — символическая ссылка (не NULL).

ENOENT

Программа задаётся dirfd и по pathname требуется использовать интерпретирующую программу (то есть сценарий, начинающийся с «#!»), но файловый дескриптор dirfd открыт с флагом O_CLOEXEC , что приводит к недоступности файла программы запускаемому интерпретатору. Смотрите ДЕФЕКТЫ.

ENOTDIR

Значение pathname содержит относительный путь и dirfd содержит файловый дескриптор, указывающий на файл, а не на каталог.

СТАНДАРТЫ

Linux.

ИСТОРИЯ

Linux 3.19, glibc 2.34.

ПРИМЕЧАНИЯ

В дополнении к причинам, описанным в openat (2), системному вызову execveat () также требуется разрешить fexecve (3) для реализации в системах, у которых не смонтированной файловой системы /proc .

При запросе запуска файла сценария, значение argv[0] , передаваемое в интерпретатор сценарий, является строкой в виде /dev/fd/N или /dev/fd/N/P , где N — номер файлового дескриптора, передаваемого через аргумент dirfd . Строка в первом формате встречается, когда указан AT_EMPTY_PATH . Строка во втором формате встречается, когда сценарий задаётся сразу через dirfd и pathname ; в этом случае P — это значение, указанное в pathname .

По причинам, описанным в fexecve (3), естественным подходом является использование execveat () с установленным флагом close-on-exec у dirfd (но смотрите ДЕФЕКТЫ).

ОШИБКИ

Ошибка ENOENT , описанная выше, означает, что невозможно установить флаг close-on-exec у файлового дескриптора, переданного вызову в виде:

execveat(fd, "", argv, envp, AT_EMPTY_PATH);

Однако неспособность установить флаг close-on-exec означает утечку файловых дескрипторов, через ссылку сценария на самого себя. Помимо траты файлового дескриптора, это может привести к исчерпанию файловых дескрипторов, если сценарии рекурсивно вызывают execveat ().

СМОТРИТЕ ТАКЖЕ

execve (2), openat (2), fexecve (3)

ПЕРЕВОД

Русский перевод этой страницы руководства разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков .