Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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