atribute(7) Miscellaneous Information Manual atribute(7) NUME attributes - concepte de sigurana POSIX DESCRIERE Nota: textul acestei pagini de manual se bazeaza pe materialul preluat din seciunea ,,POSIX Safety Concepts" a manualului GNU C Library. Detalii suplimentare despre subiectele descrise aici pot fi gasite in acel manual. Diverse pagini de manual ale funciilor includ o seciune ATRIBUTE care descrie sigurana apelarii funciei in diverse contexte. Aceasta seciune adnoteaza funciile cu urmatoarele marcaje de sigurana: MT-Safe Funciile MT-Safe sau Thread-Safe pot fi apelate in sigurana in prezena altor fire de execuie. MT, in MT-Safe, inseamna Multi Thread. (multiple fire de execuie) A fi MT-Safe nu inseamna ca o funcie este atomica i nici ca utilizeaza vreunul dintre mecanismele de sincronizare a memoriei pe care POSIX le expune utilizatorilor. Este chiar posibil ca apelarea funciilor MT-Safe in succesiune sa nu produca o combinaie MT-Safe. De exemplu, apelarea de catre un fir de execuie a doua funcii MT-Safe una imediat dupa alta nu garanteaza un comportament echivalent cu execuia atomica a unei combinaii a ambelor funcii, deoarece apelurile simultane in alte fire de execuie pot interfera intr-un mod distructiv. Optimizarile intregului program care ar putea include funcii in interfee de biblioteca pot expune o reordonare nesigura i, prin urmare, nu se recomanda includerea in interfaa bibliotecii GNU C. Statutul MT-Safety documentat nu este garantat in cazul optimizarii intregului program. Cu toate acestea, funciile definite in antetele vizibile pentru utilizator sunt proiectate sa fie sigure pentru ,,inlining". MT-Unsafe Funciile MT-Unsafe nu pot fi apelate in sigurana in programele multithreaded (executate folosind mai multe fire). Alte cuvinte-cheie care apar in notele de sigurana sunt definite in seciunile urmatoare. Caracteristici de sigurana condiionala Pentru unele caracteristici care fac ca apelarea funciilor sa fie nesigura in anumite contexte, exista modalitai cunoscute de a evita problema securitaii, altele decat abinerea totala de la apelarea funciei. Cuvintele-cheie care urmeaza se refera la astfel de caracteristici, iar fiecare dintre definiiile lor indica modul in care intregul program trebuie sa fie constrans pentru a elimina problema de securitate indicata de cuvantul-cheie. Numai atunci cand toate motivele care fac o funcie nesigura sunt observate i abordate, prin aplicarea constrangerilor documentate, funcia devine sigura pentru a fi apelata intr-un context. init Funciile marcate cu init ca o caracteristica MT-Unsafe efectueaza iniializarea MT-Unsafe atunci cand sunt apelate pentru prima data. Apelarea unei astfel de funcii cel puin o data in modul single-threaded (un singur fir de execuie) elimina aceasta cauza specifica pentru care funcia este considerata MT-Unsafe. Daca nu ramane nicio alta cauza, funcia poate fi apelata in sigurana dupa pornirea altor fire de execuie. race Funciile adnotate cu race ca o problema de sigurana MT opereaza asupra obiectelor in moduri care pot cauza curse de date sau forme similare de interferena distructiva in afara execuiei simultane. In unele cazuri, obiectele sunt transmise funciilor de catre utilizatori; in altele, acestea sunt utilizate de catre funcii pentru a returna valori utilizatorilor; in altele, acestea nici macar nu sunt expuse utilizatorilor. const Funciile marcate cu const ca o problema de MT-Safety modifica non-atomic obiecte interne care sunt mai bine considerate constante, deoarece o parte substaniala a bibliotecii GNU C le acceseaza fara sincronizare. Spre deosebire de race, care face ca atat cititorii, cat i scriitorii de obiecte interne sa fie considerai MT-Unsafe, acest marcaj este aplicat doar scriitorilor. Scriitorii raman MT-Unsafe la apelare, dar constana obligatorie a obiectelor pe care le modifica permite cititorilor sa fie considerai MT-Safe (atat timp cat nu exista alte motive pentru care sa fie nesiguri), deoarece lipsa sincronizarii nu este o problema atunci cand obiectele sunt efectiv constante. Identificatorul care urmeaza marcajul const va aparea de la sine ca o nota de sigurana in cititoare. Programele care doresc sa ocoleasca aceasta problema de sigurana, astfel incat sa apeleze scriitorii, pot utiliza un blocaj de citire-scriere non-recursiv asociat identificatorului i sa protejeze apelurile all catre funciile marcate cu const urmate de identificator cu un blocaj de scriere i apelurile all catre funciile marcate cu identificatorul de la sine cu un blocaj de citire. sig Funciile marcate cu sig ca o problema de sigurana MT pot instala temporar un gestionar de semnal in scopuri interne, care poate interfera cu alte utilizari ale semnalului, identificat dupa doua puncte (:). Aceasta problema de sigurana poate fi rezolvata prin asigurarea faptului ca nu vor avea loc alte utilizari ale semnalului pe durata apelului. Se recomanda meninerea unui mutex non-recursiv in timpul apelarii tuturor funciilor care utilizeaza acelai semnal temporar; blocarea semnalului respectiv inainte de apel i reiniializarea gestionarului acestuia dupa apel. term Funciile marcate cu term ca fiind o problema de MT-Safety pot modifica parametrii terminalului in modul recomandat, i anume: apeleaza tcgetattr(3), modifica unele opiuni i apoi apeleaza tcsetattr(3), ceea ce creeaza o fereastra in care modificarile efectuate de alte fire se pierd. Astfel, funciile marcate cu term sunt MT-Unsafe. Prin urmare, este recomandabil ca aplicaiile care utilizeaza terminalul sa evite interaciunile concurente i reentrante cu acesta, neutilizandu-l in gestionarii de semnale sau blocand semnalele care l-ar putea utiliza i deinand un blocaj in timp ce apeleaza aceste funcii i interacioneaza cu terminalul. Aceasta blocare ar trebui, de asemenea, utilizata pentru excluderea reciproca cu funcii marcate cu race:tcattr(fd), unde fd este un descriptor de fiier pentru terminalul de control. Apelantul poate utiliza un singur mutex pentru simplificare sau poate utiliza un mutex pentru fiecare terminal, chiar daca se face referire la acesta prin descriptori de fiier diferii. Alte observaii privind sigurana Funciilor li se pot ataa cuvinte-cheie suplimentare, indicand caracteristici care nu fac ca apelarea unei funcii sa fie nesigura, dar care ar putea fi luate in considerare in anumite clase de programe: locale Funciile notate cu locale ca o problema de sigurana MT citesc din obiectul de configurare regionala fara nicio forma de sincronizare. Funciile adnotate cu locale apelate concomitent cu modificarile configurarii regionale se pot comporta in moduri care nu corespund niciuneia dintre configuraiile regionale active in timpul execuiei lor, ci unui amestec imprevizibil al acestora. Cu toate acestea, nu marcam aceste funcii ca MT-Unsafe, deoarece funciile care modifica obiectul de configurare regionala sunt marcate cu const:locale i considerate nesigure. Fiind nesigure, acestea din urma nu trebuie sa fie apelate atunci cand ruleaza mai multe fire de execuie sau cand sunt activate semnale asincrone i, astfel, configurarile regionale pot fi considerate efectiv constante in aceste contexte, ceea ce le face sigure. env Funciile marcate cu env ca o problema de sigurana MT acceseaza mediul cu getenv(3) sau similar, fara nicio protecie pentru a asigura sigurana in prezena modificarilor simultane. Cu toate acestea, nu marcam aceste funcii ca MT-Unsafe, deoarece funciile care modifica mediul sunt toate marcate cu const:env i considerate nesigure. Fiind nesigure, acestea din urma nu trebuie sa fie apelate atunci cand ruleaza mai multe fire de execuie sau cand sunt activate semnale asincrone, astfel incat mediul poate fi considerat efectiv constant in aceste contexte, ceea ce le face sigure. hostid Funciile marcate cu hostid ca o problema de sigurana MT citesc din structurile de date la nivel de sistem care conin ,,ID-ul de gazda" al mainii. In general, aceste structuri de date nu pot fi modificate atomic. Deoarece se preconizeaza ca ,,ID-ul gazdei" nu se va modifica in mod normal, funcia care citete din acesta (gethostid(3)) este considerata sigura, in timp ce funcia care il modifica (sethostid(3)) este marcata cu const:hostid, indicand faptul ca ar putea necesita o atenie speciala daca va fi apelata. In acest caz specific, grija speciala inseamna coordonare la nivelul intregului sistem (nu doar in interiorul procesului). sigintr Funciile marcate cu sigintr ca o problema de sigurana MT acceseaza structura interna de date _sigintr a Bibliotecii GNU C fara nicio protecie pentru a asigura sigurana in prezena modificarilor simultane. Cu toate acestea, nu marcam aceste funcii ca MT-Unsafe, deoarece funciile care modifica aceasta structura de date sunt toate marcate cu const:sigintr i considerate nesigure. Fiind nesigure, acestea din urma nu trebuie sa fie apelate atunci cand ruleaza mai multe fire de execuie sau cand sunt activate semnale asincrone, astfel incat structura de date poate fi considerata efectiv constanta in aceste contexte, ceea ce le face pe primele sigure. cwd Funciile marcate cu cwd ca o problema de sigurana MT pot modifica temporar directorul curent de lucru in timpul execuiei lor, ceea ce poate determina rezolvarea in moduri neateptate a numelor de rute relative in alte fire de execuie sau in cadrul gestionarilor asincroni de semnal sau de anulare. Acesta nu este un motiv suficient pentru a marca funciile astfel marcate ca MT-Unsafe, dar atunci cand acest comportament este opional (de exemplu, nftw(3) cu FTW_CHDIR), evitarea opiunii poate fi o alternativa buna la utilizarea numelor de ruta complete sau a apelurilor de sistem relative la descriptorul de fiier (de exemplu, openat(2)). :identifier Adnotarile pot fi uneori urmate de identificatori, destinai sa grupeze mai multe funcii care, de exemplu, acceseaza structurile de date intr-un mod nesigur, ca in race i const, sau sa furnizeze informaii mai specifice, cum ar fi numirea unui semnal intr-o funcie marcata cu sig. Se preconizeaza ca, in viitor, aceasta poate fi aplicata i la lock i corrupt. In majoritatea cazurilor, identificatorul va numi un set de funcii, dar poate numi obiecte globale sau argumente de funcii, sau proprietai identificabile sau componente logice asociate cu acestea, cu o notaie 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 fiier fd. Cea mai frecventa utilizare a identificatorilor este de a furniza grupuri logice de funcii i argumente care trebuie sa fie protejate de aceeai primitiva de sincronizare pentru a asigura funcionarea sigura intr-un anumit context. /condition Unele adnotari de sigurana pot fi condiionate, in sensul ca se aplica numai daca o expresie booleana care implica argumente, variabile globale sau chiar nucleul subiacent este evaluata la adevarat (true). De exemplu, /!ps i /one_per_line indica faptul ca marcajul precedent se aplica numai atunci cand argumentul ps este NULL sau variabila globala one_per_line este diferita de zero. Atunci cand toate marcajele care fac o funcie nesigura sunt ,,impodobite" cu astfel de condiii i niciuna dintre condiiile menionate nu se aplica, atunci funcia poate fi considerata sigura. CONSULTAI I pthreads(7), signal-safety(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.18 8 februarie 2026 atribute(7)