Яка різниця між epoll_wait і Epoll_pwait?

Хоча один потік заблоковано під час виклику epoll_pwait(), інший потік може додати дескриптор файлу до очікуваного екземпляра epoll. Якщо новий файловий дескриптор стане готовим, це призведе до розблокування виклику epoll_wait().

Загальний опис. epoll_wait() очікує бажаних подій вводу/виводу в списку інтересів, зареєстрованих у наданому екземплярі epoll. epoll_pwait() подібний до epoll_wait() за винятком того, що він приймає додатковий аргумент sigmask, який визначає бажану маску сигналу, коли epoll_pwait() заблоковано.

Інтерфейс epoll_wait() повинен очікувати подій у дескрипторі файлу epoll, визначеному параметром epfd. У разі успіху події вихідного параметра мають посилатися на область пам’яті, що містить структури epoll_event, доступні для викликаючого.

epoll_wait(2) очікує на події введення/виведення, блокування потоку виклику, якщо в даний момент немає доступних подій. (Цей системний виклик можна розглядати як отримання елементів зі списку готових примірника epoll.)

На відміну від select і poll, які забезпечують лише один API, epoll — це не один API, а група з 3 API. epoll_create і epoll_add викликаються для налаштування екземпляра epoll, тоді як epoll_wait можна викликати в циклі для постійного очікування fds, доданих epoll_add.

У випадку epoll() за допомогою інтерфейсу, що запускається по краю, він повідомлятиме про подію лише тоді, коли змінюється статус дескриптора файлу, що контролюється (наприклад, із «не читається» на «читається»), тоді як при використанні інтерфейсу, що запускається за рівнем він продовжуватиме повідомляти про подію до тих пір, поки залишається відстежуваний дескриптор файлу …