Provided by: manpages-pl-dev_20060617-1_all bug

NAZWA

       popen, pclose - we/wy procesu

SKŁADNIA

       #include <stdio.h>

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

       int pclose(FILE *stream);

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ę. Argument type jest zakończonym  znakiem  NUL  łańcuchem,
       który musi być albo `r', albo `w' (odpowiednio dla odczytu i zapisu).

       Wartość  zwracana  przez  popen()  to  normalny  strumień  we/wy,  lecz
       powinien  on  być  zamykany  przy  użyciu  pclose()  zamiast  fclose().
       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.

WARTOŚĆ ZWRACANA

       Funkcja popen zwraca NULL jeśli nie powiodły się wywołania fork(2)  lub
       pipe(2), lub jeśli nie udało się przydzielić pamięci.

       Funkcja  pclose  zwraca  -1 jeśli wait4 zwróci błąd lub zostały wykryte
       jakieś inne błędy.

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() lub pipe(),
       to errno będzie odpowiednio  ustawione.  Jeżeli  argument  mode  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.

ZGODNE Z

       POSIX.2

USTERKI

       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.

HISTORIA

       Funkcje popen() i pclose() pojawiły się w wersji 7 AT&T UNIX.

ZOBACZ TAKŻE

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