popen(3) Library Functions Manual popen(3) NAZWA popen, pclose - strumieniuje potok do lub z procesu BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include 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, tworzac potok, rozwidlajac sie przez fork() i wywolujac powloke. Poniewaz potok jest z definicji jednokierunkowy, argument type moze okreslac tylko odczyt albo tylko zapis, nie oba naraz. Otrzymany w wyniku tego strumien bedzie tylko do odczytu albo tylko do zapisu. Argument command jest wskaznikiem do zakonczonego znakiem NUL lancucha, zawierajacego wiersz polecen powloki. Polecenie to jest przekazywane do /bin/sh przy uzyciu opcji -c; wszelka interpretacja jest dokonywana przez powloke. Argument type jest wskaznikiem do lancucha zakonczonego znakiem null, ktory musi zawierac albo litere ,,r" (do odczytu), albo litere ,,w" (do zapisu). Od glibc 2.9, argument ten moze dodatkowo obejmowac litere ,,e", co powoduje ustawienie znacznika zamkniecia przy wykonaniu (FD_CLOEXEC) na przedmiotowym deskryptorze pliku; powody, dla ktorych moze byc to uzyteczne opisano przy znaczniku O_CLOEXEC w podreczniku open(2). Wartosc zwracana przez popen() to normalny strumien wejscia/wyjscia, lecz powinien on byc zamykany przy uzyciu pclose() zamiast fclose(3). Zapisywanie do takiego strumienia powoduje pisanie na standardowe wejscie polecenia. Standardowe wyjscie polecenia jest takie samo, jak procesu, ktory wywolal popen(), chyba ze zostalo to zmienione przez polecenie. Podobnie, odczyt z tak otwartego strumienia powoduje odczyt ze standardowego wyjscia polecenia, a standardowe wejscie polecenia jest wtedy tozsame z wejsciem procesu, ktory wywolal popen(). Nalezy zauwazyc, ze strumienie wyjsciowe powstale z popen() sa domyslnie w pelni buforowane. Funkcja pclose() oczekuje na zakonczenie stowarzyszonego procesu i zwraca jego kod zakonczenia, podobnie jak to czyni wait4(2). WARTOSC ZWRACANA popen: przy powodzeniu zwraca wskaznik do otwartego strumienia, ktory moze sluzyc do odczytu lub zapisu do potoku; jesli nie powiodly sie wywolania fork(2) lub pipe(2), lub jesli nie udalo sie przydzielic pamieci, zwracane jest NULL. pclose: przy powodzeniu zwraca status zakonczenia polecenia; jesli wait4 zwroci blad lub zostaly wykryte jakies inne bledy, zwracane jest -1. W przypadku bledu, obie funkcje ustawiaja errno, wskazujac blad. BLEDY Funkcja popen() nie ustawia errno, jezeli nie uda sie przydzielic pamieci. Jezeli nie powioda sie wywolywane przez nia fork(2) lub pipe(2), to ustawione bedzie errno, wskazujac blad. Jezeli argument type bedzie nieprawidlowy i zostanie to wykryte, to errno zostanie ustawione na EINVAL. Jezeli nie bedzie mozliwe otrzymanie kodu zakonczenia procesu potomnego przez pclose(), to errno zostanie ustawione na ECHILD. ATRYBUTY Informacje o pojeciach uzywanych w tym rozdziale mozna znalezc w podreczniku attributes(7). +---------------------------+--------------------------+---------------+ |Interfejs | Atrybut | Wartosc | +---------------------------+--------------------------+---------------+ |popen(), pclose() | Bezpieczenstwo watkowe | MT-bezpieczne | +---------------------------+--------------------------+---------------+ WERSJE Wartosc ,,e" dla type jest rozszerzeniem systemu Linux. STANDARDY POSIX.1-2008. HISTORIA POSIX.1-2001. ZASTRZEZENIA Prosze dokladnie zapoznac sie z Zastrzezeniami w podreczniku system(3). USTERKI Przesuniecie standardowego wejscia polecenia otwartego do odczytu jest takie samo dla tego polecenia i dla procesu, ktory wywolal popen(), zatem jesli oryginalny proces wykona buforowany odczyt, to pozycja na wejsciu polecenia moze byc inna niz oczekiwano. Podobnie, wyjscie polecenia otwartego dla zapisu moze zostac wymieszane z wyjsciem procesu oryginalnego. Temu ostatniemu mozna zapobiec, wolajac przed popen() funkcje fflush(3). Blad w wywolaniu powloki jest nieodroznialny od bledu powloki przy wywolywaniu polecenia, czy od natychmiastowego zakonczenia polecenia. Jedynym sladem jest kod zakonczenia rowny 127. ZOBACZ TAKZE sh(1), fork(2), pipe(2), wait4(2), fclose(3), fflush(3), fopen(3), stdio(3), system(3) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Przemek Borys , Jaroslaw Beczek , Andrzej Krzysztofowicz i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.9.1 2 maja 2024 r. popen(3)