pidfd_getfd(2)

NUME
pidfd_getfd - obține un duplicat al descriptorului de fișier al unui alt proces

BIBLIOTECA
Biblioteca C standard (libc, -lc)

REZUMAT
#include <sys/syscall.h>      /* Definirea constantelor SYS_* */
#include <unistd.h>

int syscall(SYS_pidfd_getfd, int pidfd, int targetfd,
            unsigned int flags);

Notă: glibc nu oferă nici o funcție de învăluire pentru pidfd_getfd(), fiind necesară utilizarea syscall(2).

DESCRIERE
Apelul de sistem pidfd_getfd() alocă un nou descriptor de fișier în procesul apelant. Acest nou descriptor de fișier este un duplicat al unui descriptor de fișier existent, targetfd, în procesul la care se face referire prin descriptorul de fișier PID pidfd.

Descriptorul de fișier duplicat se referă la aceeași descriere de fișier deschis (a se vedea open(2)) ca și descriptorul de fișier original în procesul la care se referă pidfd. Astfel, cei doi descriptori de fișiere au în comun fanioanele de stare a fișierului și poziția fișierului. În plus, operațiile asupra obiectului de fișier subiacent (de exemplu, atribuirea unei adrese unui obiect soclu utilizând bind(2)) pot fi efectuate în mod egal prin intermediul descriptorului de fișier duplicat.

Fanionul close-on-exec (FD_CLOEXEC; a se vedea fcntl(2)) este activat pe descriptorul de fișier returnat de pidfd_getfd().

Argumentul flags este rezervat pentru utilizare viitoare. În prezent, acesta trebuie să fie specificat ca fiind 0.

Permisiunea de a duplica descriptorul de fișier al unui alt proces este guvernată de o verificare PTRACE_MODE_ATTACH_REALCREDS a modului de acces ptrace (a se vedea ptrace(2)).

VALOAREA RETURNATĂ
În caz de reușită, pidfd_getfd() returnează un descriptor de fișier (un număr întreg nenegativ). În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI

EBADF
    pidfd nu este un descriptor de fișier PID valid.

EBADF
    targetfd nu este un descriptor de fișier deschis în procesul la care face referire pidfd.

EINVAL
    fanioane nu este 0.

EMFILE
    A fost atinsă limita per-proces a numărului de descriptori de fișiere deschise (a se vedea descrierea lui RLIMIT_NOFILE în getrlimit(2)).

ENFILE
    Limita la nivel de sistem a numărului total de fișiere deschise a fost atinsă.

EPERM
    Procesul apelant nu a avut permisiuni PTRACE_MODE_ATTACH_REALCREDS (a se vedea ptrace(2)) asupra procesului la care se face referire prin pidfd.

ESRCH
    Procesul la care se face referire prin pidfd nu există (adică s-a încheiat și a fost așteptat).

STANDARDE
Linux.

ISTORIC
Linux 5.6.

NOTE
Pentru o descriere a descriptorilor de fișiere PID, a se vedea pidfd_open(2).

Efectul pidfd_getfd() este similar cu utilizarea mesajelor SCM_RIGHTS descrise în unix(7), dar diferă în următoarele privințe:

•   Pentru a transmite un descriptor de fișier utilizând un mesaj SCM_RIGHTS, cele două procese trebuie să stabilească mai întâi o conexiune de tip soclu de domeniu UNIX.

•   Utilizarea lui SCM_RIGHTS necesită cooperare din partea procesului al cărui descriptor de fișier este copiat. În schimb, o astfel de cooperare nu este necesară atunci când se utilizează pidfd_getfd().

•   Capacitatea de a utiliza pidfd_getfd() este restricționată de o verificare a modului de acces la ptrace PTRACE_MODE_ATTACH_REALCREDS.

CONSULTAȚI ȘI
clone3(2), dup(2), kcmp(2), pidfd_open(2)

TRADUCERE
Traducerea în limba română a acestui manual a fost creată 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.