Man page - get_robust_list(2)

Packages contains this manual

Available languages:

en fr ru ro

Manual

get_robust_list

NUME
BIBLIOTECA
SINOPSIS
DESCRIERE
VALOAREA RETURNATĂ
ERORI-IEȘIRE
VERSIUNI
NOTE
CONSULTAȚI ȘI
TRADUCERE

NUME

get_robust_list, set_robust_list - obține/stabilește lista de futex-uri robuste

BIBLIOTECA

Biblioteca C standard ( libc , -lc )

SINOPSIS

#include <linux/futex.h> /* Definiția lui struct robust_list_head */
#include <sys/syscall.h>
/* Definirea constantelor SYS_* */
#include <unistd.h>

long syscall(SYS_get_robust_list, int pid ,
struct robust_list_head **
head_ptr , size_t * len_ptr );
long syscall(SYS_set_robust_list,
struct robust_list_head *
head , size_t len );

Notă : Nu există nicio funcție învăluitoare (wrapper) glibc pentru aceste apeluri de sistem astfel că este necesară utilizarea a syscall (2).

DESCRIERE

Aceste apeluri de sistem se ocupă de listele futex robuste pentru fiecare fir. Aceste liste sunt gestionate în spațiul utilizatorului: nucleul știe doar despre locația antetului listei. Un fir de execuție poate informa nucleul cu privire la locația listei sale de futex-uri robuste folosind set_robust_list (). Adresa listei de futex-uri robuste a unui fir de execuție poate fi obținută folosind get_robust_list ().

Scopul listei robuste de futex este de a se asigura că, în cazul în care un fir nu reușește din greșeală să deblocheze un futex înainte de a se termina sau de a apela execve (2), un alt fir care așteaptă acel futex este notificat că fostul proprietar al futexului a murit. Această notificare constă în două părți: bitul FUTEX_OWNER_DIED este activat în cuvântul futex, iar nucleul efectuează o operație futex (2) FUTEX_WAKE pe unul dintre firele care așteaptă futex-ul.

Apelul de sistem get_robust_list () returnează antetul listei futex robustă a firului al cărui ID de fir este specificat în pid . Dacă pid este 0, se returnează antetul listei pentru firul apelant. Antetul listei este stocat în locația indicată de head_ptr . Dimensiunea obiectului indicat de **head_ptr este stocată în len_ptr .

Permisiunea de a utiliza get_robust_list () este guvernată de o verificare a modului de acces ptrace PTRACE_MODE_READ_REALCREDS ; a se vedea ptrace (2).

Apelul de sistem set_robust_list () solicită nucleului să înregistreze antetul listei de futex-uri robuste deținute de firul apelant. Argumentul head este antetul listei care trebuie înregistrat. Argumentul len trebuie să fie sizeof(*head) .

VALOAREA RETURNATĂ

Apelurile de sistem set_robust_list () și get_robust_list () returnează zero atunci când operațiunea este reușită, iar în caz contrar un cod de eroare.

ERORI-IEȘIRE

Apelul de sistem set_robust_list () poate eșua cu următoarea eroare:

EINVAL

len nu este egal cu sizeof(struct robust_list_head) .

Apelul de sistem get_robust_list () poate eșua cu următoarele erori:

EFAULT

Antetul listei futex robuste nu poate fi stocat în locația head .

EPERM

Procesul care face apelul nu are permisiunea de a vedea lista robustă futex a firului cu ID-ul firului pid și nu are capacitatea CAP_SYS_PTRACE .

ESRCH

Nu a putut fi găsit niciun fir cu ID-ul firului pid .

VERSIUNI

Aceste apeluri de sistem au fost adăugate în Linux 2.6.17.

NOTE

Aceste apeluri de sistem nu sunt necesare pentru aplicațiile normale.

Un fir de execuție poate avea doar o singură listă de futex-uri robuste; prin urmare, aplicațiile care doresc să utilizeze această funcționalitate ar trebui să folosească mutex-urile robuste furnizate de glibc.

În implementarea inițială, un fir de execuție care aștepta un futex era notificat că proprietarul acestuia a murit numai dacă proprietarul se termina. Începând cu Linux 2.6.28, notificarea a fost extinsă pentru a include cazul în care proprietarul efectuează un execve (2).

ID-urile de fire menționate în textul principal sunt ID-uri de fire kernel de tipul celor returnate de clone (2) și gettid (2).

CONSULTAȚI ȘI

futex (2), pthread_mutexattr_setrobust (3)

Documentation/robust-futexes.txt și Documentation/robust-futex-ABI.txt în arborele sursă al nucleului Linux

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