select/pselect
Функция select (или pselect) является основной функцией большинства программ на языке
C, эффективно обрабатывающих одновременно более одного файловового дескриптора (илисокета). Ее аргументами являются три массива файловых дескрипторов: readfds, writefds и exceptfds. Как правило, при использовании select программа ожидает "изменения состояния" одного или более файловых дескрипторов. Под "изменением состояния" понимается появление новых символов в потоке, с которым связан файловый дескриптор, или появление во внутренних буферах ядра места для записи в поток, или возникновение ошибки, связанной с файловым дескриптором (в случае сокета или канала это происходит, когда другая сторона закрывает соединение).
Таким образом, select просто следит за несколькими файловыми дескрипторами и является стандартным вызовом Unix для этих целей.
int select(int n, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *utimeout);
int pselect(int n, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, const struct timespec *ntimeout, sigset_t *sigmask);