Programas que quieren seguir ejecutándose mientras también la lectura de la entrada interactiva del usuario debe ser multiproceso o necesitan leer los flujos de entrada cuidadosamente y, específicamente, condicionalmente.
Select(2)
se puede utilizar para implementar el segundo patrón de diseño. Puede determinar si la entrada se puede leer sin bloquear toda la aplicación.
El select()
La llamada al sistema le dice si hay datos para leer en los descriptores de archivo que le interesan. Estrictamente, se trata de si una operación de lectura en el descriptor de archivo se bloqueará o no.
Si ejecuta read()
en un descriptor de archivo, como el que está conectado a un puerto serie, y no hay datos para leer, la llamada se colgará hasta que haya algunos datos para leer. Programas que usan select()
no deseo ser bloqueado de esa manera.
También preguntas:
¿Por qué tenemos que incrementar el descriptor de archivo en 1 y pasarlo mientras paso el descriptor de archivo establecido en select
? ?
Probablemente esté especificando el tamaño del FD_SET. El primer argumento de select()
se conoce como nfds
y POSIX dice:
El nfds
El argumento especifica el rango de descriptores a probar. El primer nfds
se comprobarán los descriptores en cada conjunto; es decir, los descriptores de cero a nfds-1
en los conjuntos de descriptores serán examinados.
Entonces, para probar un descriptor de archivo n
, el valor en nfds
debe ser al menos n+1
.
Utiliza la llamada de selección cuando tiene que monitorear constantemente los descriptores de archivos hasta que estén listos para algún IO sin bloqueo.
Generalmente se usa cuando desea que el IO (por ejemplo, read ()) no bloquee, lea la:página de manual
Lea también las API relacionadas