Provided by: manpages-pl-dev_4.26.0-1_all 

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).
┌──────────────────────────────────────────────────────────────┬────────────────────────┬───────────────┐
│ Interfejs │ Atrybut │ Wartość │
├──────────────────────────────────────────────────────────────┼────────────────────────┼───────────────┤
│ 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.9.1 2 maja 2024 r. popen(3)