epoll_wait(2) System Calls Manual epoll_wait(2) NUME epoll_wait, epoll_pwait, epoll_pwait2 - ateapta un eveniment de In/Ie pe un descriptor de fiier epoll BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include int epoll_wait(int n; int epfd, struct epoll_event events[n], int n, int timeout); int epoll_pwait(int n; int epfd, struct epoll_event events[n], int n, int timeout, const sigset_t *_Nullable sigmask); int epoll_pwait2(int n; int epfd, struct epoll_event events[n], int n, const struct timespec *_Nullable timeout, const sigset_t *_Nullable sigmask); DESCRIERE Apelul de sistem epoll_wait() ateapta evenimente pe instana epoll(7) menionata de descriptorul de fiier epfd. Tamponul indicat de events este utilizat pentru a returna informaii din lista pregatita despre descriptorii de fiiere din lista de interese care au unele evenimente disponibile. Pana la n sunt returnate de epoll_wait(). Argumentul n trebuie sa fie mai mare decat zero. Argumentul timeout specifica numarul de milisecunde in care epoll_wait() se va bloca. Timpul este masurat in raport cu ceasul CLOCK_MONOTONIC. Un apel la epoll_wait() se va bloca pana cand: o un descriptor de fiier furnizeaza un eveniment; o apelul este intrerupt de un gestionar de semnal; sau o timpul de ateptare expira. Reinei ca intervalul timeout va fi rotunjit la gradul de finee al ceasului de sistem, iar intarzierile de planificare ale nucleului inseamna ca intervalul de blocare poate fi depait cu o cantitate mica. Specificarea unui timeout de -1 face ca epoll_wait() sa se blocheze indefinit, in timp ce specificarea unui timeout egal cu zero face ca epoll_wait() sa returneze imediat, chiar daca nu sunt disponibile evenimente. structura epoll_event este descrisa in epoll_event(3type). Campul data al fiecarei structuri epoll_event returnate conine aceleai date ca cele specificate in cel mai recent apel la epoll_ctl(2) (EPOLL_CTL_ADD, EPOLL_CTL_MOD) pentru descriptorul de fiier deschis corespunzator. Campul events este o masca de bii care indica evenimentele care au avut loc pentru descrierea fiierului deschis corespunzator. Consultai epoll_ctl(2) pentru o lista a biilor care pot aparea in aceasta masca. epoll_pwait() Relaia dintre epoll_wait() i epoll_pwait() este analoga cu relaia dintre select(2) i pselect(2): la fel ca pselect(2), epoll_pwait() permite unei aplicaii sa atepte in sigurana pana cand un descriptor de fiier devine gata sau pana cand un semnal este recepionat. Urmatorul apel epoll_pwait(): ready = epoll_pwait(epfd, &events, n, timeout, &sigmask); este echivalent cu executarea atomica a urmatoarelor apeluri: sigset_t origmask; pthread_sigmask(SIG_SETMASK, &sigmask, &origmask); ready = epoll_wait(epfd, &events, n, timeout); pthread_sigmask(SIG_SETMASK, &origmask, NULL); Argumentul sigmask poate fi specificat ca NULL, caz in care epoll_pwait() este echivalent cu epoll_wait(). epoll_pwait2() Apelul de sistem epoll_pwait2() este echivalent cu epoll_pwait(), cu excepia argumentului timeout. Acesta ia un argument de tip timespec pentru a putea specifica timpul de ateptare pentru rezoluia de nanosecunde. Acest argument funcioneaza la fel ca in pselect(2) i ppoll(2). Daca timeout este NULL, atunci epoll_pwait2() se poate bloca indefinit. VALOAREA RETURNATA In caz de succes, epoll_wait() returneaza numarul de descriptori de fiier pregatii pentru operaia I/O solicitata sau zero daca niciun descriptor de fiier nu a devenit pregatit in timpul milisecundelor timeout solicitate. In caz de eec, epoll_wait() returneaza -1 i errno este configurata pentru a indica eroarea. ERORI-IEIRE EBADF epfd nu este un descriptor de fiier valid. EFAULT Zona de memorie indicata de events nu este accesibila cu permisiuni de scriere. EINTR Apelul a fost intrerupt de un gestionar de semnal inainte ca (1) oricare dintre evenimentele solicitate sa se produca sau (2) timpul de ateptare sa expire; a se vedea signal(7). EINVAL epfd nu este un descriptor de fiier epoll sau n este mai mic sau egal cu zero. STANDARDE Linux. ISTORIC epoll_wait() Linux 2.6, glibc 2.3.2. epoll_pwait() Linux 2.6.19, glibc 2.6. epoll_pwait2() Linux 5.11. NOTE In timp ce un fir este blocat intr-un apel la epoll_wait(), este posibil ca un alt fir sa adauge un descriptor de fiier la instana epoll aflata in ateptare. Daca noul descriptor de fiier devine disponibil, acesta va determina deblocarea apelului epoll_wait(). Daca mai mult de n descriptori de fiiere sunt disponibili atunci cand se apeleaza epoll_wait(), atunci apelurile succesive epoll_wait() vor parcurge in cerc setul de descriptori de fiiere disponibili. Acest comportament ajuta la evitarea scenariilor de infometare, in care un proces nu observa ca ali descriptori de fiiere sunt gata deoarece se concentreaza pe un set de descriptori de fiiere despre care se tie deja ca sunt pregatii. Reinei ca este posibil sa apelai epoll_wait() pe o instana epoll a carei lista de interese este in prezent goala (sau a carei lista de interese devine goala deoarece descriptorii de fiiere sunt inchii sau eliminai din interes intr-un alt fir). Apelul se va bloca pana cand un descriptor de fiier este adaugat ulterior la lista de interese (intr-un alt fir de execuie) i acel descriptor de fiier devine disponibil. Diferene intre biblioteca C i nucleu Apelurile de sistem brute epoll_pwait() i epoll_pwait2() au un al aselea argument, size_t sigsetsize, care specifica dimensiunea in octei a argumentului sigmask. Funcia de invaluire a glibc epoll_pwait() specifica acest argument ca o valoare fixa (egala cu sizeof(sigset_t)). ERORI Inainte de Linux 2.6.37, o valoare timeout mai mare decat aproximativ LONG_MAX / HZ milisecunde este tratata ca -1 (adica infinit). Astfel, de exemplu, pe un sistem in care sizeof(long) este 4 i valoarea HZ a nucleului este 1000, aceasta inseamna ca timpii de ateptare mai mari de 35,79 minute sunt tratai ca infinit. CONSULTAI I epoll_create(2), epoll_ctl(2), epoll(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 epoll_wait(2)