proc_pid_fd(5)

NUME
/proc/pid/fd/ - descriptori de fișiere

DESCRIERE

/proc/pid/fd/
    Acesta este un subdirector care conține o intrare pentru fiecare fișier pe care procesul îl are deschis, numit prin descriptorul său de fișier, și care este o legătură simbolică către fișierul real. Astfel, 0 este intrarea standard, 1 ieșirea standard, 2 ieșirea de eroare standard și așa mai departe.

    Pentru descriptorii de fișiere pentru conducte și socluri, intrările vor fi legături simbolice al căror conținut este tipul de fișier cu nodul-i. Un apel readlink(2) pe acest fișier returnează un șir de caractere în formatul:

        type:[nod-i]

    De exemplu, socket:[2248868] va fi un soclu, iar nodul-i al său este 2248868. Pentru socluri, acest nod-i poate fi utilizat pentru a găsi mai multe informații în unul dintre fișierele de sub /proc/net/.

    Pentru descriptorii de fișier care nu au un nod-i corespondent (de exemplu, descriptorii de fișier produși de bpf(2), epoll_create(2), eventfd(2), inotify_init(2), perf_event_open(2), signalfd(2), timerfd_create(2) și userfaultfd(2)), intrarea va fi o legătură simbolică cu conținutul de forma

        anon_inode:tip-fișier

    În multe cazuri (dar nu în toate), tip-fișier este încadrat între paranteze drepte.

    De exemplu, un descriptor de fișier epoll va avea o legătură simbolică al cărei conținut este șirul anon_inode:[eventpoll].

    Într-un proces cu mai multe fire de execuție, conținutul acestui director nu este disponibil dacă firul de execuție principal s-a încheiat deja (de obicei prin apelarea pthread_exit(3)).

    Programele care primesc un nume de fișier ca argument al liniei de comandă, dar nu primesc intrare de la intrarea standard dacă nu este furnizat niciun argument, și programele care scriu într-un fișier numit ca argument al liniei de comandă, dar nu își trimit ieșirea la ieșirea standard dacă nu este furnizat niciun argument, pot fi totuși făcute să utilizeze intrarea standard sau ieșirea standard prin utilizarea fișierelor /proc/pid/fd ca argumente ale liniei de comandă. De exemplu, presupunând că -i este fanionul care desemnează un fișier de intrare și -o este fanionul care desemnează un fișier de ieșire:

        $ foobar -i /proc/self/fd/0 -o /proc/self/fd/1 ...

    și aveți un filtru funcțional.

    /proc/self/fd/N este aproximativ la fel ca /dev/fd/N în unele sisteme UNIX și sisteme de tip UNIX. De fapt, majoritatea scripturilor Linux MAKEDEV leagă simbolic /dev/fd de /proc/self/fd.

    Majoritatea sistemelor oferă legături simbolice /dev/stdin, /dev/stdout și /dev/stderr, care fac legătura cu fișierele 0, 1 și 2 din /proc/self/fd. Astfel, exemplul de comandă de mai sus ar putea fi scris după cum urmează:

        $ foobar -i /dev/stdin -o /dev/stdout ...

    Permisiunea de a dereferenția sau de a citi (readlink(2)) legăturile simbolice din acest director este guvernată de o verificare a modului de acces ptrace PTRACE_MODE_READ_FSCREDS; consultați ptrace(2).

    Rețineți că pentru descriptorii de fișiere care se referă la noduri-i (conducte și socluri, a se vedea mai sus), acele noduri-i au în continuare biți de permisiune și informații de proprietate distincte de cele ale intrării /proc/pid/fd și că proprietarul poate fi diferit de ID-urile de utilizator și de grup ale procesului. Un proces neprivilegiat poate să nu aibă permisiunea de a le deschide, ca în acest exemplu:

        $ echo test | sudo -u nobody cat
        test
        $ echo test | sudo -u nobody cat /proc/self/fd/0
        cat: /proc/self/fd/0: Permission denied

    Descriptorul de fișier 0 se referă la conducta creată de shell și deținută de utilizatorul acelui shell, care nu este nobody, deci cat nu are permisiunea de a crea un nou descriptor de fișier pentru a citi din acel nod-i, chiar dacă poate citi în continuare din descriptorul de fișier 0 existent.

CONSULTAȚI ȘI
proc(5)

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.