Scroll to navigation

pidfd_getfd(2) System Calls Manual 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

pidfd nu este un descriptor de fișier PID valid.
targetfd nu este un descriptor de fișier deschis în procesul la care face referire pidfd.
fanioane nu este 0.
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)).
Limita la nivel de sistem a numărului total de fișiere deschise a fost atinsă.
Procesul apelant nu a avut permisiuni PTRACE_MODE_ATTACH_REALCREDS (a se vedea ptrace(2)) asupra procesului la care se face referire prin pidfd.
Procesul la care se face referire prin pidfd nu există (adică s-a încheiat și a fost așteptat).

VERSIUNI

pidfd_getfd() a apărut pentru prima dată în Linux 5.6.

STANDARDE

pidfd_getfd() este specific pentru Linux.

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 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.

5 februarie 2023 Pagini de manual de Linux 6.03