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
       ⟨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⟩.