Provided by: manpages-ro-dev_4.21.0-2_all bug

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

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