2012-01-01 5 views
21

Me preguntaba qué hace el nfds, después de leer diferentes manuales, termino con la única respuesta siendo es el descriptor de archivo con el número más alto más uno. ¿Para qué se usa exactamente?Cuál es el nfds de select() usado para

+3

http://unix.stackexchange.com/questions/7742/whats-the-purpose-of-the-first-argument-to-select-system-call –

Respuesta

13

Cuando usa select(), está tratando de verificar el estado de un conjunto de descriptores de archivos. El rango posible de descriptores de archivos que le interesan oscila entre un mínimo de 0 (entrada estándar) y un valor máximo (el descriptor de archivo más alto que tiene abierto y que le interesa verificar el estado). Tiene que indicar select() qué tan grande es la lista de descriptores de archivos porque el número total puede ser 'vasto' (32767, por ejemplo). En ese caso, lleva tiempo que el kernel procese los descriptores, además puede que no haya inicializado el fd_set hasta ese número de entradas. FD_SETSIZE también figura en la ecuación, pero a veces puede cambiar ese valor.

lo tanto, si desea supervisar los descriptores de fichero 24-31, lo haces con nfds a 32, y asegúrese de que utiliza FD_ZERO() a cero toda la fd_set y FD_SET() para configurar las entradas 24-31. Tenga en cuenta también que select() modifica los parámetros de entrada, por lo que debe usar FD_ISSET() para probar después de los retornos select(), y en general debe volver a realizar la inicialización (o copiar un valor guardado) de fd_set antes de llamar al select() nuevamente.

+1

Del nombre 'nfds' (* número de archivo descriptors *) Hubiera esperado '7' cuando quiero monitorear el número fd' 24' a '31'. ¿Por qué '32'? (Sé que tienes razón, la página del hombre también dice eso, pero me pregunto por qué) – hek2mgl

+0

@ hek2mgl: Es porque el conjunto comienza en el descriptor de archivo 0; no hay forma de que en la interfaz se especifique otro punto de inicio. Eso puede ralentizar las cosas si está utilizando 'select()' en un servidor con miles de descriptores de archivos abiertos. –

+2

Votación descendente: incluso si la respuesta es (la mayoría) correcta, omite los detalles críticos y está redactada de una manera que es imposible de comprender. Por favor, consulte http://unix.stackexchange.com/questions/7742/whats-the-purpose-of-the-first-argument-to-select-system-call en su lugar. – marcv81

Cuestiones relacionadas