Что такое nfds из select (), используемого для

Мне было интересно, что делает nfds , прочитав разные руководства, я получаю единственный ответ: это наивысший нумерованный файловый дескриптор плюс один . Для чего он точно используется?

    Когда вы используете select() , вы пытаетесь проверить состояние набора дескрипторов файлов. Возможный диапазон файловых дескрипторов, которые вас интересуют, варьируется от низкого значения 0 (стандартный ввод) до некоторого максимального значения (самый высокий файловый дескриптор, который вы открыли, который вас интересует при проверке состояния). Вы должны указать select() насколько велик список файловых дескрипторов, потому что общее число может быть «огромным» (например, 32767). В этом случае требуется, чтобы kernel ​​обработало дескрипторы, плюс вы не могли инициализировать fd_set до этого количества записей. FD_SETSIZE также фигурирует в уравнении, но иногда вы можете изменить это значение.

    Итак, если вы хотите отслеживать файловые дескрипторы 24-31, вы должны установить nfds на 32 и убедиться, что вы используете FD_ZERO() для нулевого значения всех fd_set и FD_SET() для установки записей 24-31. Также обратите внимание, что select() изменяет входные параметры, поэтому вам нужно использовать FD_ISSET() для тестирования после возврата select() , и в общем случае вам нужно повторить инициализацию (или скопировать сохраненное значение) fd_set перед вызовом select() снова.