.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2014 Google, Inc., written by David Drysdale .\" and Copyright (c) 2015, Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH execveat 2 "30 марта 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ execveat \- выполняет программу, определяемую относительно файлового дескриптора каталога .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP /* определения констант \fBAT_*\fP */ \fB#include \fP .PP \fBint execveat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\fP\fB,\fP \fB char *const _Nullable \fP\fIargv\fP\fB[],\fP \fB char *const _Nullable \fP\fIenvp\fP\fB[],\fP \fB int \fP\fIflags\fP\fB);\fP .fi .SH ОПИСАНИЕ .\" commit 51f39a1f0cea1cacf8c787f652f26dfee9611874 Системный вызов \fBexecveat\fP() выполняет программу, на которую ссылается комбинация \fIdirfd\fP и \fIpathname\fP. Он работает также как системный вызов \fBexecve\fP(2), за исключением случаев, описанных в данной справочной странице. .PP Если в \fIpathname\fP задан относительный путь, то он считается относительно каталога, на который ссылается файловый дескриптор \fIdirfd\fP (а не относительно текущего рабочего каталога вызывающего процесса, как это делается в \fBexecve\fP(2)). .PP Если в \fIpathname\fP задан относительный путь и \fIdirfd\fP равно специальному значению \fBAT_FDCWD\fP, то \fIpathname\fP рассматривается относительно текущего рабочего каталога вызывающего процесса (как \fBexecve\fP(2)). .PP Если в \fIpathname\fP задан абсолютный путь, то \fIdirfd\fP игнорируется. .PP Если \fIpathname\fP — пустая строка и указан флаг \fBAT_EMPTY_PATH\fP, то файловым дескриптором \fIdirfd\fP задаётся выполняемый файл (т. е., \fIdirfd\fP ссылается на исполняемый файл, а не на каталог). .PP Аргумент \fIflags\fP является битовой маской, которая может включать ноль или более следующих флагов: .TP \fBAT_EMPTY_PATH\fP Если значение \fIpathname\fP равно пустой строке, то вызов выполняет действие с файлом, на который ссылается \fIdirfd\fP (может быть получен с помощью \fBopen\fP(2) с флагом \fBO_PATH\fP). .TP \fBAT_SYMLINK_NOFOLLOW\fP Если файл задаётся \fIdirfd\fP и \fIpathname\fP — символическая ссылка (не NULL), то вызов завершается с ошибкой \fBELOOP\fP. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" On success, \fBexecveat\fP() does not return. On error, \-1 is returned, and \fIerrno\fP is set to indicate the error. .SH ОШИБКИ В \fBexecveat\fP() могут возникнуть те же ошибки, что и в \fBexecve\fP(). Также, в \fBexecveat\fP() могут возникнуть следующие ошибки: .TP \fIpathname\fP is relative but \fIdirfd\fP is neither \fBAT_FDCWD\fP nor a valid file descriptor. .TP \fBEINVAL\fP Указано неверное значение в \fIflags\fP. .TP \fBELOOP\fP Значение \fIflags\fP содержит \fBAT_SYMLINK_NOFOLLOW\fP и файл задаётся \fIdirfd\fP, а \fIpathname\fP — символическая ссылка (не NULL). .TP \fBENOENT\fP Программа задаётся \fIdirfd\fP и по \fIpathname\fP требуется использовать интерпретирующую программу (то есть сценарий, начинающийся с «#!»), но файловый дескриптор \fIdirfd\fP открыт с флагом \fBO_CLOEXEC\fP, что приводит к недоступности файла программы запускаемому интерпретатору. Смотрите ДЕФЕКТЫ. .TP \fBENOTDIR\fP Значение \fIpathname\fP содержит относительный путь и \fIdirfd\fP содержит файловый дескриптор, указывающий на файл, а не на каталог. .SH СТАНДАРТЫ Linux. .SH ИСТОРИЯ Linux 3.19, glibc 2.34. .SH ЗАМЕЧАНИЯ В дополнении к причинам, описанным в \fBopenat\fP(2), системному вызову \fBexecveat\fP() также требуется разрешить \fBfexecve\fP(3) для реализации в системах, у которых не смонтированной файловой системы \fI/proc\fP. .PP При запросе запуска файла сценария, значение \fIargv[0]\fP, передаваемое в интерпретатор сценарий, является строкой в виде \fI/dev/fd/N\fP или \fI/dev/fd/N/P\fP, где \fIN\fP — номер файлового дескриптора, передаваемого через аргумент \fIdirfd\fP. Строка в первом формате встречается, когда указан \fBAT_EMPTY_PATH\fP. Строка во втором формате встречается, когда сценарий задаётся сразу через \fIdirfd\fP и \fIpathname\fP; в этом случае \fIP\fP — это значение, указанное в \fIpathname\fP. .PP По причинам, описанным в \fBfexecve\fP(3), естественным подходом является использование \fBexecveat\fP() с установленным флагом close\-on\-exec у \fIdirfd\fP (но смотрите ДЕФЕКТЫ). .SH ДЕФЕКТЫ Ошибка \fBENOENT\fP, описанная выше, означает, что невозможно установить флаг close\-on\-exec у файлового дескриптора, переданного вызову в виде: .PP .in +4n .EX execveat(fd, "", argv, envp, AT_EMPTY_PATH); .EE .in .PP .\" For an example, see Michael Kerrisk's 2015-01-10 reply in this LKML .\" thread (http://thread.gmane.org/gmane.linux.kernel/1836105/focus=20229): .\" .\" Subject: [PATCHv10 man-pages 5/5] execveat.2: initial man page.\" for execveat(2 .\" Date: Mon, 24 Nov 2014 11:53:59 +0000 Однако неспособность установить флаг close\-on\-exec означает утечку файловых дескрипторов, через ссылку сценария на самого себя. Помимо траты файлового дескриптора, это может привести к исчерпанию файловых дескрипторов, если сценарии рекурсивно вызывают \fBexecveat\fP(). .SH "СМ. ТАКЖЕ" \fBexecve\fP(2), \fBopenat\fP(2), \fBfexecve\fP(3) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Azamat Hackimov , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .