popen(3)

NUME
popen, pclose - flux de conductă către sau de la un proces

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <stdio.h>

FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

popen(), pclose():
    _POSIX_C_SOURCE >= 2
        || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

DESCRIERE
Funcția popen() deschide un proces prin crearea unei conducte, prin bifurcare și prin invocarea shell-ului. Deoarece o conductă este, prin definiție, unidirecțională, argumentul type poate specifica numai citire sau scriere, nu ambele; fluxul rezultat este, în consecință, numai-pentru-citire sau numai-pentru-scriere.

Argumentul command este un indicator la un șir de caractere cu terminație nulă care conține o linie de comandă de tip shell. Această comandă este transmisă către /bin/sh folosind opțiunea -c; interpretarea, dacă este cazul, este efectuată de către shell.

Argumentul type este un indicator către un șir de caractere cu terminație nulă care trebuie să conțină fie litera „r” pentru citire, fie litera „w” pentru scriere. Începând cu glibc 2.9, acest argument poate include, de asemenea, litera „e”, care determină activarea fanionului „close-on-exec” (FD_CLOEXEC) pe descriptorul de fișier subiacent; a se vedea descrierea fanionului O_CLOEXEC în open(2) pentru motivele pentru care acest lucru poate fi util.

Valoarea returnată de popen() este un flux de intrare/ieșire standard normal în toate privințele, cu excepția faptului că trebuie închis cu pclose() în loc de fclose(3). Scrierea pe un astfel de flux se scrie în intrarea standard a comenzii; ieșirea standard a comenzii este aceeași cu cea a procesului care a apelat popen(), cu excepția cazului în care aceasta este modificată de comanda însăși. În schimb, citirea de pe flux citește ieșirea standard a comenzii, iar intrarea standard a comenzii este aceeași cu cea a procesului care a apelat popen().

Rețineți că fluxurile de ieșire popen() sunt stocate în bloc în mod implicit.

Funcția pclose() așteaptă ca procesul asociat să se încheie și returnează starea de ieșire a comenzii, așa cum este returnată de wait4(2).

VALOAREA RETURNATĂ
popen(): în caz de succes, returnează un indicator către un flux deschis care poate fi utilizat pentru a citi sau a scrie în conductă; dacă apelurile fork(2) sau pipe(2) eșuează sau dacă funcția nu poate aloca memorie, se returnează NULL.

pclose(): în caz de succes, returnează starea de ieșire a comenzii; dacă wait4(2) returnează o eroare sau dacă este detectată o altă eroare, se returnează -1.

În caz de eșec, ambele funcții configurează errno pentru a indica eroarea.

ERORI-IEȘIRE
Funcția popen() nu configurează errno dacă alocarea memoriei eșuează. În cazul în care funcția fork(2) sau pipe(2) subiacentă eșuează, errno este configurată pentru a indica eroarea. În cazul în care argumentul type nu este valid, iar această condiție este detectată, errno este stabilită la EINVAL.

Dacă pclose() nu poate obține starea copilului, errno este stabilită la ECHILD.

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
popen(), pclose() | Siguranța firelor | MT-Safe

VERSIUNI
Valoarea „e” pentru type este o extensie Linux.

STANDARDE
POSIX.1-2008.

ISTORIC
POSIX.1-2001.

AVERTISMENTE
Citiți cu atenție Avertismentele din system(3).

ERORI
Deoarece intrarea standard a unei comenzi deschise pentru citire își împarte poziția de căutare cu procesul care a apelat popen(), în cazul în care procesul original a efectuat o citire în memoria tampon, este posibil ca poziția de intrare a comenzii să nu fie cea așteptată. În mod similar, ieșirea unei comenzi deschise pentru scriere se poate amesteca cu cea a procesului original. Aceasta din urmă poate fi evitată prin apelarea fflush(3) înainte de popen().

Eșecul executării shell-ului nu se deosebește de eșecul executării comenzii shell-ului sau de ieșirea imediată a comenzii. Singurul indiciu este o stare de ieșire de 127.

CONSULTAȚI ȘI
sh(1), fork(2), pipe(2), wait4(2), fclose(3), fflush(3), fopen(3), stdio(3), system(3)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.