plucky (3) pclose.3.gz

Provided by: manpages-pl-dev_4.25.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 ⟨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⟩.