Provided by: manpages-pl-dev_4.15.0-9_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 <= 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.

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

BŁĘDY

       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.

       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.13  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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.