Provided by: manpages-ru-dev_4.27.0-1_all bug

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

       popen, pclose - конвейерный поток в или из процесса

БИБЛИОТЕКА

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

ОБЗОР

       #include <stdio.h>

       FILE *popen(const char *command, const char *type);
       int pclose(FILE *stream);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       popen(), pclose():
           _POSIX_C_SOURCE >= 2
               || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

ОПИСАНИЕ

       Функция  popen()  открывает процесс следующим образом: создаёт канал, выполняет fork и вызывает командную
       оболочку. Так как канал задается однонаправленным, в аргументе type может быть  задан  один  режим:  либо
       чтение либо запись.

       Аргумент command представляет собой указатель на строку с null в конце, которая содержит командную строку
       оболочки.  Эта  команда  передаётся  в  /bin/sh  с  помощью  флага  -c; все подстановке в ней выполняются
       оболочкой.

       The type argument is a pointer to a null-terminated string which must contain either the letter  'r'  for
       reading  or  the  letter  'w'  for  writing.  Since glibc 2.9, this argument can additionally include the
       letter 'e', which causes  the  close-on-exec  flag  (FD_CLOEXEC)   to  be  set  on  the  underlying  file
       descriptor; see the description of the O_CLOEXEC flag in open(2)  for reasons why this may be useful.

       Возвращаемое  popen()  значение  является  стандартным потоком ввода-вывода, за исключением того, что его
       нужно закрывать с помощью pclose(), а не fclose(3). Запись в такой поток выполняет запись  в  стандартный
       поток  ввода  команды;  стандартного  потока вывода команды тот же, что и у процесса, вызвавшего popen(),
       если он не был изменён самой командой. При чтении из потока выполняется чтение  из   стандартного  потока
       вывода  команды,  а  стандартный поток ввода тот же, что и у процесса, вызвавшего popen(), если он не был
       изменён самой командой.

       Заметим, что потоки вывода popen() по умолчанию блокируемые и буферизированные.

       Функция  pclose()  ожидает  завершения  ассоциированного  процесса  и  возвращает  код  выхода   команды,
       возвращаемый функцией wait4(2).

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

       popen():  при  успешном  выполнении  возвращается указатель на открытый поток, его можно использовать для
       чтения или записи в канал; если вызов fork(2) или pipe(2) завершается с ошибкой или если функция не может
       выделить память, то возвращается NULL.

       pclose(): при успешном выполнении возвращает код завершения команды; если wait4(2) возвращает ошибку  или
       возникает какая-то другая ошибка, то возвращается -1.

       On failure, both functions set errno to indicate the error.

ОШИБКИ

       The  popen()   function  does  not  set  errno if memory allocation fails.  If the underlying fork(2)  or
       pipe(2)  fails, errno is set to indicate the error.  If the type argument is invalid, and this  condition
       is detected, errno is set to EINVAL.

       Если pclose() не удаётся получить код выхода потомка, то errno присваивается ECHILD.

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).
       ┌─────────────────────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ ИнтерфейсАтрибутЗначение │
       ├─────────────────────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │ popen(), pclose()                                                   │ Безвредность в нитях │ MT-Safe  │
       └─────────────────────────────────────────────────────────────────────┴──────────────────────┴──────────┘

ВЕРСИИ

       The 'e' value for type is a Linux extension.

СТАНДАРТЫ

       POSIX.1-2008.

ИСТОРИЯ

       POSIX.1-2001.

CAVEATS

       Carefully read Caveats in system(3).

ОШИБКИ

       Так  как смещение поиска у открытого для чтения стандартного ввода команды доступным процессу, вызвавшему
       popen(), и исходный процесс выполнял буферное чтение, то позиция ввода команды может  быть  не  той,  что
       ожидается.  Подобным  образом,  вывод  из  команды,  открытой  на запись, может будет спутан с выводом из
       исходного процесса. Последнего можно избежать, если вызывать fflush(3) перед popen().

       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(1), fork(2), pipe(2), wait4(2), fclose(3), fflush(3), fopen(3), stdio(3), system(3)

ПЕРЕВОД

       Русский     перевод     этой    страницы    руководства    разработал(и)    Alexey,    Azamat    Hackimov
       <azamat.hackimov@gmail.com>,      kogamatranslator49      <r.podarov@yandex.ru>,       Darima       Kogan
       <silverdk99@gmail.com>,  Max  Is  <ismax799@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 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

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

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                         popen(3)