NAZWA¶
popen, pclose - we/wy procesu
SKŁADNIA¶
#include <stdio.h>
 
FILE *popen(const char *command, const char
  *type);
 
int pclose(FILE *stream);
OPIS¶
 Uwaga! To tłumaczenie może być nieaktualne!
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)
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
  Tłumaczenia Manuali i 
może nie być aktualne. W razie
  zauważenia różnic między powyższym opisem a
  rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
  zapoznanie się z oryginalną (angielską) wersją strony
  podręcznika za pomocą polecenia:
  
  - man --locale=C 3 popen
 
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
  znaleźć pod adresem
  
http://sourceforge.net/projects/manpages-pl/.