.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1991 The Regents of the University of California. .\" All rights reserved. .\" .\" SPDX-License-Identifier: BSD-4-Clause-UC .\" .\" @(#)popen.3 6.4 (Berkeley) 4/30/91 .\" .\" Converted for Linux, Mon Nov 29 14:45:38 1993, faith@cs.unc.edu .\" Modified Sat May 18 20:37:44 1996 by Martin Schulze (joey@linux.de) .\" Modified 7 May 1998 by Joseph S. Myers (jsm28@cam.ac.uk) .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH popen 3 "2 мая 2024 г." "Справочные страницы Linux 6.9.1" .SH ИМЯ popen, pclose \- конвейерный поток в или из процесса .SH БИБЛИОТЕКА Стандартная библиотека языка C (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#include \fP .P \fBFILE *popen(const char *\fP\fIcommand\fP\fB, const char *\fP\fItype\fP\fB);\fP \fBint pclose(FILE *\fP\fIstream\fP\fB);\fP .fi .P .RS -4 Требования макроса тестирования свойств для glibc (см. \fBfeature_test_macros\fP(7)): .RE .P \fBpopen\fP(), \fBpclose\fP(): .nf _POSIX_C_SOURCE >= 2 || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE .fi .SH ОПИСАНИЕ Функция \fBpopen\fP() открывает процесс следующим образом: создаёт канал, выполняет fork и вызывает командную оболочку. Так как канал задается однонаправленным, в аргументе \fItype\fP может быть задан один режим: либо чтение либо запись. .P Аргумент \fIcommand\fP представляет собой указатель на строку с null в конце, которая содержит командную строку оболочки. Эта команда передаётся в \fI/bin/sh\fP с помощью флага \fB\-c\fP; все подстановке в ней выполняются оболочкой. .P The \fItype\fP argument is a pointer to a null\-terminated string which must contain either the letter \[aq]r\[aq] for reading or the letter \[aq]w\[aq] for writing. Since glibc 2.9, this argument can additionally include the letter \[aq]e\[aq], which causes the close\-on\-exec flag (\fBFD_CLOEXEC\fP) to be set on the underlying file descriptor; see the description of the \fBO_CLOEXEC\fP flag in \fBopen\fP(2) for reasons why this may be useful. .P Возвращаемое \fBpopen\fP() значение является стандартным потоком ввода\-вывода, за исключением того, что его нужно закрывать с помощью \fBpclose\fP(), а не \fBfclose\fP(3). Запись в такой поток выполняет запись в стандартный поток ввода команды; стандартного потока вывода команды тот же, что и у процесса, вызвавшего \fBpopen\fP(), если он не был изменён самой командой. При чтении из потока выполняется чтение из стандартного потока вывода команды, а стандартный поток ввода тот же, что и у процесса, вызвавшего \fBpopen\fP(), если он не был изменён самой командой. .P Заметим, что потоки вывода \fBpopen\fP() по умолчанию блокируемые и буферизированные. .P Функция \fBpclose\fP() ожидает завершения ассоциированного процесса и возвращает код выхода команды, возвращаемый функцией \fBwait4\fP(2). .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" \fBpopen\fP(): при успешном выполнении возвращается указатель на открытый поток, его можно использовать для чтения или записи в канал; если вызов \fBfork\fP(2) или \fBpipe\fP(2) завершается с ошибкой или если функция не может выделить память, то возвращается NULL. .P .\" These conditions actually give undefined results, so I commented .\" them out. .\" .I stream .\" is not associated with a "popen()ed" command, if .\".I stream .\" already "pclose()d", or if \fBpclose\fP(): при успешном выполнении возвращает код завершения команды; если \fBwait4\fP(2) возвращает ошибку или возникает какая\-то другая ошибка, то возвращается \-1. .P On failure, both functions set \fIerrno\fP to indicate the error. .SH ОШИБКИ The \fBpopen\fP() function does not set \fIerrno\fP if memory allocation fails. If the underlying \fBfork\fP(2) or \fBpipe\fP(2) fails, \fIerrno\fP is set to indicate the error. If the \fItype\fP argument is invalid, and this condition is detected, \fIerrno\fP is set to \fBEINVAL\fP. .P Если \fBpclose\fP() не удаётся получить код выхода потомка, то \fIerrno\fP присваивается \fBECHILD\fP. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ .na .nh \fBpopen\fP(), \fBpclose\fP() T} Безвредность в нитях MT\-Safe .TE .SH ВЕРСИИ The \[aq]e\[aq] value for \fItype\fP is a Linux extension. .SH СТАНДАРТЫ POSIX.1\-2008. .SH ИСТОРИЯ POSIX.1\-2001. .SH CAVEATS Carefully read Caveats in \fBsystem\fP(3). .SH ОШИБКИ Так как смещение поиска у открытого для чтения стандартного ввода команды доступным процессу, вызвавшему \fBpopen\fP(), и исходный процесс выполнял буферное чтение, то позиция ввода команды может быть не той, что ожидается. Подобным образом, вывод из команды, открытой на запись, может будет спутан с выводом из исходного процесса. Последнего можно избежать, если вызывать \fBfflush\fP(3) перед \fBpopen\fP(). .P .\" .SH HISTORY .\" A .\" .BR popen () .\" and a .\" .BR pclose () .\" function appeared in Version 7 AT&T UNIX. Failure to execute the shell is indistinguishable from the shell's failure to execute the command, or an immediate exit of the command. The only hint is an exit status of 127. .SH "СМОТРИТЕ ТАКЖЕ" \fBsh\fP(1), \fBfork\fP(2), \fBpipe\fP(2), \fBwait4\fP(2), \fBfclose\fP(3), \fBfflush\fP(3), \fBfopen\fP(3), \fBstdio\fP(3), \fBsystem\fP(3) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) Alexey, Azamat Hackimov , kogamatranslator49 , Darima Kogan , Max Is , Yuri Kozlov и Иван Павлов . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .