Когда вы используете 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()
снова.