Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       popen, pclose - strumieniuje potok do lub z procesu

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

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 potok, rozwidlając się przez fork() i wywołując powłokę. Ponieważ
       potok  jest  z  definicji jednokierunkowy, 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ę.

       Argument type jest wskaźnikiem do łańcucha zakończonego znakiem null, który musi zawierać albo literę „r”
       (do odczytu), albo literę „w” (do zapisu). Od glibc 2.9, argument ten  może  dodatkowo  obejmować  literę
       „e”,   co   powoduje  ustawienie  znacznika  zamknięcia  przy  wykonaniu  (FD_CLOEXEC)  na  przedmiotowym
       deskryptorze pliku; powody, dla których  może  być  to  użyteczne  opisano  przy  znaczniku  O_CLOEXEC  w
       podręczniku open(2).

       Wartość  zwracana  przez popen() to normalny strumień wejścia/wyjścia, lecz powinien on być zamykany przy
       użyciu pclose() zamiast fclose(3). Zapisywanie do takiego  strumienia  powoduje  pisanie  na  standardowe
       wejście  polecenia.  Standardowe  wyjście  polecenia jest takie samo, jak procesu, który wywołał popen(),
       chyba że zostało to zmienione przez polecenie. Podobnie,  odczyt  z  tak  otwartego  strumienia  powoduje
       odczyt  ze standardowego wyjścia polecenia, a standardowe wejście polecenia jest wtedy tożsame z wejściem
       procesu, który wywołał 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:  przy  powodzeniu zwraca wskaźnik do otwartego strumienia, który może służyć do odczytu lub zapisu
       do potoku; jeśli nie powiodły się wywołania fork(2) lub pipe(2), lub  jeśli  nie  udało  się  przydzielić
       pamięci, zwracane jest NULL.

       pclose:  przy powodzeniu zwraca status zakończenia polecenia; jeśli wait4 zwróci błąd lub zostały wykryte
       jakieś inne błędy, zwracane jest -1.

       W przypadku błędu, obie funkcje ustawiają errno, wskazując błąd.

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 ustawione będzie errno, wskazując błąd. 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-bezpieczne │
       └──────────────────────────────────────────────────────────────┴────────────────────────┴───────────────┘

WERSJE

       Wartość „e” dla type jest rozszerzeniem systemu Linux.

STANDARDY

       POSIX.1-2008.

HISTORIA

       POSIX.1-2001.

ZASTRZEŻENIA

       Proszę dokładnie zapoznać się z Zastrzeżeniami w podręczniku system(3).

USTERKI

       Przesunięcie  standardowego  wejścia  polecenia otwartego do odczytu jest takie samo dla tego polecenia i
       dla procesu, który wywołał popen(), zatem 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)

TŁUMACZENIE

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

       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.

Linux man-pages 6.8                              2 maja 2024 r.                                         popen(3)