getcontext(3) Library Functions Manual getcontext(3) NUME getcontext, setcontext - obine sau stabilete contextul utilizatorului BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #include int getcontext(ucontext_t *ucp); int setcontext(const ucontext_t *ucp); DESCRIERE Intr-un mediu de tip System V, exista cele doua tipuri mcontext_t i ucontext_t definite in i cele patru funcii getcontext(), setcontext(), makecontext(3) i swapcontext(3) care permit comutarea contextului la nivel de utilizator intre mai multe fire de control in cadrul unui proces. Tipul mcontext_t depinde de maina i este opac. Tipul ucontext_t este o structura care are cel puin urmatoarele campuri: typedef struct ucontext_t { struct ucontext_t *uc_link; sigset_t uc_sigmask; stack_t uc_stack; mcontext_t uc_mcontext; ... } ucontext_t; cu sigset_t i stack_t definite in . Aici uc_link indica contextul care va fi reluat atunci cand contextul curent se termina (in cazul in care contextul curent a fost creat folosind makecontext(3)), uc_sigmask este setul de semnale blocate in acest context (a se vedea sigprocmask(2)), uc_stack este stiva utilizata de acest context (a se vedea sigaltstack(2)), iar uc_mcontext este reprezentarea specifica mainii a contextului salvat, care include registrele mainii firului apelant. Funcia getcontext() iniializeaza structura indicata de ucp in contextul activ curent. Funcia setcontext() restabilete contextul utilizatorului indicat de ucp. Un apel reuit nu returneaza. Contextul ar fi trebuit sa fie obinut printr-un apel la getcontext() sau makecontext(3), sau primit ca al treilea argument al unui gestionar de semnal (a se vedea discuia despre fanionul SA_SIGINFO din sigaction(2)). Daca contextul a fost obinut printr-un apel la getcontext(), execuia programului continua ca i cum acest apel tocmai a fost returnat. In cazul in care contextul a fost obinut printr-un apel la makecontext(3), execuia programului continua printr-un apel la funcia func specificata ca al doilea argument al apelului la makecontext(3). La intoarcerea funciei func, continuam cu membrul uc_link al structurii ucp specificat ca prim argument al acelui apel la makecontext(3). Atunci cand acest membru este NULL, firul de execuie iese. Daca contextul a fost obinut printr-un apel la un gestionar de semnal, atunci vechiul text standard spune ca ,,execuia programului continua cu instruciunea de program care urmeaza instruciunii intrerupte de semnal". Cu toate acestea, aceasta propoziie a fost eliminata in SUSv2, iar verdictul actual este ,,rezultatul este nespecificat". VALOAREA RETURNATA In caz de succes, getcontext() returneaza 0, iar setcontext() nu returneaza. In caz de eroare, ambele returneaza -1 i seteaza errno pentru a indica eroarea. ERORI-IEIRE Nu sunt definite. ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +-----------------------------+---------------------+------------------+ |Interfaa | Atribut | Valoare | +-----------------------------+---------------------+------------------+ |getcontext(), setcontext() | Sigurana firelor | MT-Safe race:ucp | +-----------------------------+---------------------+------------------+ STANDARDE Niciunul. ISTORIC SUSv2, POSIX.1-2001. POSIX.1-2008 elimina aceste funcii, invocand probleme de portabilitate i recomandand ca aplicaiile sa fie rescrise pentru a utiliza in schimb fire POSIX. NOTE Cea mai veche intruchipare a acestui mecanism a fost mecanismul setjmp(3)/ longjmp(3). Deoarece acesta nu definete gestionarea contextului semnalului, urmatoarea etapa a fost perechea sigsetjmp(3)/ siglongjmp(3). Mecanismul actual ofera mult mai mult control. Pe de alta parte, nu exista o modalitate uoara de a detecta daca o returnare de la getcontext() provine din primul apel sau prin intermediul unui apel setcontext(). Utilizatorul trebuie sa inventeze propriul dispozitiv de evidena contabila, iar o variabila de registru nu este suficienta, deoarece registrele sunt restaurate. Atunci cand apare un semnal, contextul curent al utilizatorului este salvat i un nou context este creat de catre nucleu pentru gestionarul de semnal. Nu parasii gestionarul folosind longjmp(3): nu este definit ce se intampla cu contextele. Utilizai in schimb siglongjmp(3) sau setcontext(). CONSULTAI I sigaction(2), sigaltstack(2), sigprocmask(2), longjmp(3), makecontext(3), sigsetjmp(3), signal(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.06 31 octombrie 2023 getcontext(3)