2012-03-25 2 views
0

ВПочему у syscall выбора есть только верхний предел файловых дескрипторов, а не нижний предел?

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

системного вызова, nfds является крупнейшим файловым дескриптором мы заинтересованы в том числе всех файловых дескрипторов, которые установлены в битовых картах. Я думаю, что это предназначено для эффективности, так что реализация не должна проверять все дескрипторы файлов в системе. Если это так, то почему этот сценарий не позволяет нам передать аргумент, чтобы указать минимальный файловый дескриптор интересов?

+0

Я точно не знаю, но файловые дескрипторы имеют тенденцию быть небольшими числами, так что, возможно, именно это указание нижнего предела вряд ли поможет. –

+0

Это то, что кажется простым объяснением. Но может быть и более техническая причина. – euphoria83

ответ

1

Нумерация дескриптора файла для каждого процесса не для системы, как вы говорите. Таким образом, они начинаются с нуля каждый раз, поэтому мало пользы, чтобы иметь нижний предел.

+0

Да, я понял эту концепцию вчера. – euphoria83

+0

И вы можете переместить их с помощью 'dup2'. Таким образом, нижний предел будет избыточным. –

 Смежные вопросы

  • Нет связанных вопросов^_^