Что делает "select", когда nfds равно 0?

int select(int nfds, 
 fd_set *readfds, 
 fd_set *writefds, 
 fd_set *exceptfds, 
 struct timeval *timeout);

Первый параметр select, nfds должен быть максимальным файловым дескриптором плюс 1, который должен быть как минимум 1. Но я видел, что некоторые коды устанавливают nfds равным 0, является ли это использование законным? Кроме того, возвращаемое значение select устанавливается на EINVAL, когда nfds отрицательно, или timeout содержит недопустимое значение. Опять же, он не указывает, что произошло, когда nfds равно 0.

3 ответа

В качестве альтернативы для sleep можно использовать select. Я считаю, что это достигается путем определения всех параметров как 0/NULL, кроме таймаута. Проконсультируйтесь с

Зачем использовать select() вместо sleep()?


Эта man-страница говорит, что

Некоторые вызовы кода select() со всеми тремя наборами пустыми, nfds zero и не-NULL таймаутом как довольно переносимый способ спать с точностью до секунды.


Ожидает заданный тайм-аут, а затем возвращает 0 или возвращает раньше EINTR. Если вы думаете об этом, это имеет смысл и на самом деле то, что говорится в документации, даже если оно не говорит об этом явно. То же самое происходит, если все наборы NULL или не имеют битов меньше nfds, установленных в них.

licensed under cc by-sa 3.0 with attribution.