Provided by: manpages-ro_4.27.0-1_all bug

NUME

       attributes - concepte de siguranță POSIX

DESCRIERE

       Notă:  textul  acestei  pagini  de  manual  se  bazează pe materialul preluat din secțiunea „POSIX Safety
       Concepts” a manualului GNU C Library. Detalii suplimentare despre subiectele descrise aici pot fi  găsite
       în acel manual.

       Diverse  pagini  de  manual  ale  funcțiilor  includ  o secțiune ATRIBUTE care descrie siguranța apelării
       funcției în diverse contexte. Această secțiune adnotează funcțiile cu următoarele marcaje de siguranță:

       MT-Safe
              Funcțiile MT-Safe sau Thread-Safe pot fi apelate în siguranță în prezența altor fire de  execuție.
              MT, în MT-Safe, înseamnă Multi Thread. (multiple fire de execuție)

              A  fi  MT-Safe  nu  înseamnă  că  o  funcție  este  atomică  și  nici că utilizează vreunul dintre
              mecanismele de sincronizare a memoriei pe care POSIX le expune utilizatorilor. Este chiar  posibil
              ca  apelarea  funcțiilor  MT-Safe  în  succesiune  să nu producă o combinație MT-Safe. De exemplu,
              apelarea de către un fir de execuție a două funcții MT-Safe una imediat după alta nu garantează un
              comportament echivalent cu  execuția  atomică  a  unei  combinații  a  ambelor  funcții,  deoarece
              apelurile simultane în alte fire de execuție pot interfera într-un mod distructiv.

              Optimizările  întregului  program  care  ar  putea  include funcții în interfețe de bibliotecă pot
              expune o reordonare nesigură și, prin urmare, nu se recomandă includerea în interfața  bibliotecii
              GNU  C. Statutul MT-Safety documentat nu este garantat în cazul optimizării întregului program. Cu
              toate acestea, funcțiile definite în antetele vizibile pentru utilizator sunt  proiectate  să  fie
              sigure pentru „inlining”.

       MT-Unsafe
              Funcțiile MT-Unsafe nu pot fi apelate în siguranță în programele multithreaded (executate folosind
              mai multe fire).

       Alte cuvinte-cheie care apar în notele de siguranță sunt definite în secțiunile următoare.

   Caracteristici de siguranță condițională
       Pentru  unele  caracteristici care fac ca apelarea funcțiilor să fie nesigură în anumite contexte, există
       modalități cunoscute de a evita problema securității,  altele  decât  abținerea  totală  de  la  apelarea
       funcției.  Cuvintele-cheie  care  urmează  se  referă  la  astfel  de  caracteristici, iar fiecare dintre
       definițiile lor indică modul în care întregul program trebuie să fie constrâns pentru a elimina  problema
       de  securitate  indicată  de cuvântul-cheie. Numai atunci când toate motivele care fac o funcție nesigură
       sunt observate și abordate, prin aplicarea constrângerilor documentate, funcția devine sigură pentru a fi
       apelată într-un context.

       init   Funcțiile marcate cu init ca o caracteristică MT-Unsafe efectuează inițializarea MT-Unsafe  atunci
              când sunt apelate pentru prima dată.

              Apelarea  unei  astfel  de  funcții  cel  puțin  o dată în modul single-threaded (un singur fir de
              execuție) elimină această cauză specifică pentru care funcția este considerată MT-Unsafe. Dacă  nu
              rămâne  nicio  altă  cauză,  funcția  poate  fi  apelată  în siguranță după pornirea altor fire de
              execuție.

       race   Funcțiile adnotate cu race ca o problemă de siguranță MT operează asupra obiectelor în moduri care
              pot cauza curse de date  sau  forme  similare  de  interferență  distructivă  în  afara  execuției
              simultane.  În  unele cazuri, obiectele sunt transmise funcțiilor de către utilizatori; în altele,
              acestea sunt utilizate de către funcții pentru a returna valori utilizatorilor; în altele, acestea
              nici măcar nu sunt expuse utilizatorilor.

       const  Funcțiile marcate cu const ca o problemă de MT-Safety modifică  non-atomic  obiecte  interne  care
              sunt  mai  bine  considerate  constante,  deoarece  o  parte  substanțială  a bibliotecii GNU C le
              accesează fără sincronizare. Spre  deosebire  de  race,  care  face  ca  atât  cititorii,  cât  și
              scriitorii  de  obiecte  interne  să  fie  considerați  MT-Unsafe,  acest marcaj este aplicat doar
              scriitorilor.  Scriitorii rămân MT-Unsafe la apelare, dar constanța obligatorie  a  obiectelor  pe
              care  le  modifică  permite  cititorilor  să fie considerați MT-Safe (atât timp cât nu există alte
              motive pentru care să fie nesiguri), deoarece lipsa sincronizării nu este o problemă  atunci  când
              obiectele sunt efectiv constante.

              Identificatorul  care  urmează  marcajul  const  va  apărea  de  la sine ca o notă de siguranță în
              cititoare. Programele care doresc să ocolească această problemă  de  siguranță,  astfel  încât  să
              apeleze scriitorii, pot utiliza un blocaj de citire-scriere non-recursiv asociat identificatorului
              și  să  protejeze  apelurile  all  către  funcțiile marcate cu const urmate de identificator cu un
              blocaj de scriere și apelurile all către funcțiile marcate cu identificatorul de  la  sine  cu  un
              blocaj de citire.

       sig    Funcțiile marcate cu sig ca o problemă de siguranță MT pot instala temporar un gestionar de semnal
              în  scopuri  interne, care poate interfera cu alte utilizări ale semnalului, identificat după două
              puncte (:).

              Această problemă de siguranță poate fi rezolvată prin asigurarea faptului că nu vor avea loc  alte
              utilizări  ale  semnalului  pe durata apelului. Se recomandă menținerea unui mutex non-recursiv în
              timpul apelării tuturor funcțiilor care utilizează același semnal  temporar;  blocarea  semnalului
              respectiv înainte de apel și reinițializarea gestionarului acestuia după apel.

       term   Funcțiile marcate cu term ca fiind o problemă de MT-Safety pot modifica parametrii terminalului în
              modul  recomandat,  și  anume:  apelează  tcgetattr(3),  modifică  unele  opțiuni și apoi apelează
              tcsetattr(3), ceea ce creează o fereastră în care modificările efectuate de alte  fire  se  pierd.
              Astfel, funcțiile marcate cu term sunt MT-Unsafe.

              Prin  urmare,  este recomandabil ca aplicațiile care utilizează terminalul să evite interacțiunile
              concurente și reentrante cu acesta, neutilizându-l în gestionarii de semnale sau blocând semnalele
              care  l-ar  putea  utiliza  și  deținând  un  blocaj  în  timp  ce  apelează  aceste  funcții   și
              interacționează cu terminalul. Această blocare ar trebui, de asemenea, utilizată pentru excluderea
              reciprocă  cu  funcții  marcate  cu  race:tcattr(fd),  unde fd este un descriptor de fișier pentru
              terminalul de control. Apelantul poate utiliza un  singur  mutex  pentru  simplificare  sau  poate
              utiliza  un  mutex pentru fiecare terminal, chiar dacă se face referire la acesta prin descriptori
              de fișier diferiți.

   Alte observații privind siguranța
       Funcțiilor li se pot atașa cuvinte-cheie suplimentare, indicând caracteristici care nu  fac  ca  apelarea
       unei funcții să fie nesigură, dar care ar putea fi luate în considerare în anumite clase de programe:

       locale Funcțiile  notate  cu  locale  ca  o  problemă  de siguranță MT citesc din obiectul de configurare
              regională fără nicio formă de sincronizare. Funcțiile adnotate cu locale  apelate  concomitent  cu
              modificările  configurării  regionale se pot comporta în moduri care nu corespund niciuneia dintre
              configurațiile regionale active în timpul execuției lor, ci unui amestec imprevizibil al acestora.

              Cu toate acestea, nu marcăm aceste funcții ca MT-Unsafe, deoarece funcțiile care modifică obiectul
              de configurare regională sunt marcate cu const:locale și  considerate  nesigure.  Fiind  nesigure,
              acestea din urmă nu trebuie să fie apelate atunci când rulează mai multe fire de execuție sau când
              sunt  activate  semnale  asincrone  și, astfel, configurările regionale pot fi considerate efectiv
              constante în aceste contexte, ceea ce le face sigure.

       env    Funcțiile marcate cu env ca o problemă de siguranță MT accesează mediul cu getenv(3) sau  similar,
              fără nicio protecție pentru a asigura siguranța în prezența modificărilor simultane.

              Cu  toate  acestea, nu marcăm aceste funcții ca MT-Unsafe, deoarece funcțiile care modifică mediul
              sunt toate marcate cu const:env și considerate nesigure.  Fiind  nesigure,  acestea  din  urmă  nu
              trebuie  să  fie  apelate  atunci  când  rulează mai multe fire de execuție sau când sunt activate
              semnale asincrone, astfel încât mediul poate fi considerat efectiv constant  în  aceste  contexte,
              ceea ce le face sigure.

       hostid Funcția  marcată  cu hostid ca o problemă de siguranță MT citește din structurile de date la nivel
              de sistem care conțin „ID-ul de gazdă” al mașinii. În general, aceste structuri de date nu pot  fi
              modificate  atomic.  Deoarece  se  preconizează că „ID-ul gazdei” nu se va modifica în mod normal,
              funcția care citește din acesta (gethostid(3)) este considerată sigură, în timp ce funcția care îl
              modifică (sethostid(3)) este marcată cu const:hostid, indicând  faptul  că  ar  putea  necesita  o
              atenție  specială dacă va fi apelată. În acest caz specific, grija specială înseamnă coordonare la
              nivelul întregului sistem (nu doar în interiorul procesului).

       sigintr
              Funcțiile marcate cu sigintr ca o problemă de siguranță MT accesează  structura  internă  de  date
              _sigintr  a  Bibliotecii  GNU  C  fără  nicio  protecție  pentru  a  asigura siguranța în prezența
              modificărilor simultane.

              Cu toate acestea, nu marcăm aceste funcții ca MT-Unsafe, deoarece funcțiile care modifică  această
              structură  de  date  sunt  toate marcate cu const:sigintr și considerate nesigure. Fiind nesigure,
              acestea din urmă nu trebuie să fie apelate atunci când rulează mai multe fire de execuție sau când
              sunt activate semnale asincrone, astfel încât structura  de  date  poate  fi  considerată  efectiv
              constantă în aceste contexte, ceea ce le face pe primele sigure.

       cwd    Funcțiile  marcate cu cwd ca o problemă de siguranță MT pot modifica temporar directorul curent de
              lucru în timpul execuției lor, ceea ce poate determina rezolvarea în moduri neașteptate a  numelor
              de  rute  relative în alte fire de execuție sau în cadrul gestionarilor asincroni de semnal sau de
              anulare.

              Acesta nu este un motiv suficient pentru a marca funcțiile astfel marcate ca MT-Unsafe, dar atunci
              când acest comportament este opțional (de exemplu, nftw(3) cu FTW_CHDIR), evitarea opțiunii  poate
              fi  o  alternativă bună la utilizarea numelor de rută complete sau a apelurilor de sistem relative
              la descriptorul de fișier (de exemplu, openat(2)).

       :identifier
              Adnotările pot fi uneori urmate de identificatori, destinați să grupeze mai multe funcții care, de
              exemplu, accesează structurile de date într-un mod nesigur, ca în race și const, sau să  furnizeze
              informații  mai  specifice,  cum  ar  fi  numirea  unui  semnal  într-o funcție marcată cu sig. Se
              preconizează că, în viitor, aceasta poate fi aplicată și la lock și corrupt.

              În majoritatea cazurilor, identificatorul va numi un  set  de  funcții,  dar  poate  numi  obiecte
              globale sau argumente de funcții, sau proprietăți identificabile sau componente logice asociate cu
              acestea,  cu  o  notație  precum,  de  exemplu,  :buf(arg)  pentru  a desemna un tampon asociat cu
              argumentul arg, sau :tcattr(fd) pentru a desemna  atributele  terminale  ale  unui  descriptor  de
              fișier fd.

              Cea  mai  frecventă  utilizare  a identificatorilor este de a furniza grupuri logice de funcții și
              argumente care trebuie să fie protejate de aceeași primitivă  de  sincronizare  pentru  a  asigura
              funcționarea sigură într-un anumit context.

       /condition
              Unele  adnotări  de  siguranță  pot  fi condiționate, în sensul că se aplică numai dacă o expresie
              booleană care implică argumente, variabile globale sau chiar nucleul subiacent  este  evaluată  la
              adevărat  (true).  De exemplu, /!ps și /one_per_line indică faptul că marcajul precedent se aplică
              numai atunci când argumentul ps este NULL sau variabila  globală  one_per_line  este  diferită  de
              zero.

              Atunci când toate marcajele care fac o funcție nesigură sunt „împodobite” cu astfel de condiții și
              niciuna dintre condițiile menționate nu se aplică, atunci funcția poate fi considerată sigură.

CONSULTAȚI ȘI

       pthreads(7), signal-safety(7)

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.

Pagini de manual de Linux 6.9.1                    2 mai 2024                                        atribute(7)