Provided by: manpages-pl-dev_4.13-4_all bug

NAZWA

       popen, pclose - pipe stream to or from a process

SKŁADNIA

       #include <stdio.h>

       FILE *popen(const char *command, const char *type);

       int pclose(FILE *stream);

   Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

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

OPIS

       Funkcja popen() otwiera proces, tworząc łącze, rozwidlając się przez fork() i wywołując powłokę. Ponieważ
       łącze  jest  z  definicji jednokierunkowe, argument type może określać tylko odczyt albo tylko zapis, nie
       oba naraz. Otrzymany w wyniku tego strumień będzie tylko do odczytu albo tylko do zapisu.

       Argument command jest wskaźnikiem do zakończonego znakiem  NUL  łańcucha,  zawierającego  wiersz  poleceń
       powłoki.  Polecenie  to  jest  przekazywane  do  /bin/sh przy użyciu opcji -c; wszelka interpretacja jest
       dokonywana przez powłokę.

       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.

       The  return  value  from  popen()   is  a normal standard I/O stream in all respects save that it must be
       closed with pclose()  rather than fclose(3).  Writing to such a stream writes to the  standard  input  of
       the command; the command's standard output is the same as that of the process that called popen(), unless
       this  is altered by the command itself.  Conversely, reading from the stream reads the command's standard
       output, and the command's standard input is the same as that of the process that called popen().

       Należy zauważyć, że strumienie wyjściowe powstałe z popen() są domyślnie w pełni buforowane.

       Funkcja pclose() oczekuje na zakończenie stowarzyszonego procesu i zwraca jego kod zakończenia,  podobnie
       jak to czyni wait4(2).

WARTOŚĆ ZWRACANA

       popen():  on  success, returns a pointer to an open stream that can be used to read or write to the pipe;
       if the fork(2)  or pipe(2)  calls fail, or if the function cannot allocate memory, NULL is returned.

       pclose(): on success, returns the exit status of the command; if wait4(2)   returns  an  error,  or  some
       other error is detected, -1 is returned.

       Both functions set errno to an appropriate value in the case of an error.

BŁĘDY

       Funkcja  popen()  nie  ustawia  errno,  jeżeli  nie  uda  się  przydzielić  pamięci.  Jeżeli  nie powiodą
       sięwywoływane przez nią fork(2) lub pipe(2), to errno będzie odpowiednio ustawione. Jeżeli argument  type
       będzie nieprawidłowy i zostanie to wykryte, to errno zostanie ustawione na EINVAL.

       Jeżeli nie będzie możliwe otrzymanie kodu zakończenia procesu potomnego przez pclose(), to errno zostanie
       ustawione na ECHILD.

ATRYBUTY

       Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
       ┌───────────────────┬────────────────────────┬─────────┐
       │ InterfejsAtrybutWartość │
       ├───────────────────┼────────────────────────┼─────────┤
       │ popen(), pclose() │ Bezpieczeństwo wątkowe │ MT-Safe │
       └───────────────────┴────────────────────────┴─────────┘

ZGODNE Z

       POSIX.1-2001, POSIX.1-2008.

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

UWAGI

       Note: carefully read Caveats in system(3).

BŁĘDY

       Ponieważ  offset standardowego wejścia polecenia otwartego dla odczytu jest taki sam dla tego polecenia i
       dla procesu, który wywołał popen(), więc jeśli oryginalny proces wykona buforowany odczyt, to pozycja  na
       wejściu  polecenia  może  być  inna niż oczekiwano. Podobnie, wyjście polecenia otwartego dla zapisu może
       zostać wymieszane z wyjściem procesu oryginalnego. Temu ostatniemu można zapobiec, wołając przed  popen()
       funkcję fflush(3).

       Błąd  w  wywołaniu  powłoki  jest  nieodróżnialny  od  błędu  powłoki  przy wywoływaniu polecenia, czy od
       natychmiastowego zakończenia polecenia. Jedynym śladem jest kod zakończenia równy 127.

ZOBACZ TAKŻE

       sh(1), fork(2), pipe(2), wait4(2), fclose(3), fflush(3), fopen(3), stdio(3), system(3)

O STRONIE

       Angielska wersja tej strony pochodzi z wydania 5.10 projektu Linux man-pages. Opis  projektu,  informacje
       dotyczące   zgłaszania   błędów   oraz   najnowszą   wersję   oryginału   można   znaleźć   pod   adresem
       https://www.kernel.org/doc/man-pages/.

T◈UMACZENIE

       Autorami polskiego tłumaczenia niniejszej strony podręcznika  są:  Przemek  Borys  <pborys@dione.ids.pl>,
       Jarosław Beczek <bexx@poczta.onet.pl> i Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją.  Bliższe informacje o warunkach licencji można uzyskać
       zapoznając  się  z  GNU General Public License w wersji 3  lub  nowszej.   Nie   przyjmuje   się   ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej manpages-pl-
       list@lists.sourceforge.net.

GNU                                            15 września 2017 r.                                      POPEN(3)