.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 2006-2014, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH fexecve 3 "8 февраля 2026 г." "Справочные страницы Linux 6.17" .SH НАИМЕНОВАНИЕ fexecve \- запускает программу, заданную файловым дескриптором .SH БИБЛИОТЕКА Стандартная библиотека языка C (\fIlibc\fP,\ \fI\-lc\fP) .SH ОБЗОР .nf \fB#include \fP .P \fBint fexecve(int \fP\fIfd\fP\fB, char *const \fP\fIargv\fP\fB[], char *const \fP\fIenvp\fP\fB[]);\fP .fi .P .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .P \fBfexecve\fP(): .nf Начиная с glibc 2.10: _POSIX_C_SOURCE >= 200809L До glibc 2.10: _BSD_SOURCE .fi .SH ОПИСАНИЕ Функция \fBfexecve\fP() выполняет ту же задачу, что и \fBexecve\fP(2), только выполняемый файл указывается посредством файлового дескриптора \fIfd\fP, а не через путь к файлу. Файловый дескриптор \fIfd\fP должен быть открыт только для чтения (\fBO_RDONLY\fP) или иметь флаг \fBO_PATH\fP и вызывающий должен иметь право на выполнение файла, на который ссылается дескриптор. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" A successful call to \fBfexecve\fP() never returns. On error, the function does return, with a result value of \-1, and \fIerrno\fP is set to indicate the error. .SH ОШИБКИ Возникают те же ошибки что и для \fBexecve\fP(2), а также дополнительно: .TP \fBEINVAL\fP Значение \fIfd\fP не является правильным файловым дескриптором или \fIargv\fP равно NULL, или \fIenvp\fP равно NULL. .TP \fBENOENT\fP На \fIfd\fP установлен флаг close\-on\-exec и \fIfd\fP ссылается на сценарий. Смотрите ДЕФЕКТЫ. .TP \fBENOSYS\fP Ядро не предоставляет системный вызов \fBexecveat\fP(2) и файловая система \fI/proc\fP недоступна. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ .na .nh \fBfexecve\fP() T} Безвредность в нитях MT\-Safe .TE .SH СТАНДАРТЫ POSIX.1\-2008. .SH ИСТОРИЯ glibc 2.3.2. .P .\" glibc commit 43ffc53a352a67672210c9dd4959f6c6b7407e60 В Linux c glibc с версией 2.26 и старее функция \fBfexecve\fP() реализована с использованием файловой системы \fBproc\fP(5), поэтому \fI/proc\fP должна быть смонтирована и доступна на момент вызова. Начиная с glibc 2.27, если используемое ядро поддерживает системный вызов \fBexecveat\fP(2), то \fBfexecve\fP() реализуется через этот системный вызов и \fI/proc\fP монтировать уже не нужно. .SH ПРИМЕЧАНИЯ Предназначение \fBfexecve\fP() — позволить вызывающему проверить содержимое исполняемого файла (контрольную сумму) до запуска. Простого открытия файла, вычисления контрольной суммы содержимого и выполнения \fBexecve\fP(2) недостаточно, так как между двумя этими шагами может измениться имя файла или каталог пути (например, посредством изменения цели символьной ссылки). Функция \fBfexecve\fP() не решает проблему возможного изменения \fIсодержимого\fP файла между проверкой контрольной суммы и вызовом \fBfexecve\fP() — для этого есть права на файл, которые должны предотвращать его несанкционированное изменение. .P Естественная идиома при использовании \fBfexecve\fP() — установить флаг закрытия\-при\-выполнении на \fIfd\fP для того, чтобы дескриптор файла не утекал выполняемой программе. Этот подход естественен по двум причинам. Во\-первых, это предотвращает трату дескрипторов файлов без надобности (выполняемой программе, обычно, не нужен дескриптор файла, который ссылается на саму программу). Во\-вторых, если \fBfexecve\fP() использовать рекурсивно, то применение флага закрытия\-при\-выполнении предотвращает исчерпание дескрипторов файлов, которое произошло бы, так как каждый шаг в рекурсии вызывает передачу ещё одного дескриптора файла новой программе (но смотрите ДЕФЕКТЫ). .SH ОШИБКИ Если \fIfd\fP ссылается на сценарий (т. е., это исполняемый текстовый файл, у которого в первой строке (начинается с \fI#!\fP) указан интерпретатор сценария и флаг закрытия\-при\-выполнении установлен на \fIfd\fP, то \fBfexecve\fP() завершается с ошибкой \fBENOENT\fP. Эта ошибка возникает потому, что на момент выполнения интерпретатора сценария \fIfd\fP уже закрыт, так как указан флаг закрытия\-при\-выполнении. Таким образом флаг закрытия\-при\-выполнении не может быть установлен \fIfd\fP, если он указывает на сценарий, так как это приводит к проблемам, описанным в ЗАМЕЧАНИЯХ. .SH "СМОТРИТЕ ТАКЖЕ" \fBexecve\fP(2), \fBexecveat\fP(2) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) Azamat Hackimov , Dmitry Bolkhovskikh , Yuri Kozlov и Иван Павлов . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .