select () de driver
fd_set conjunto; FD_ZERO (&set); /* establecer la clara * /FD_SET (fd, &set); /* fd se añade al conjunto * /FD_CLR (fd, &set); /* fd se borra * /FD_ISSET de este conjunto (fd, &set); /* si fd en en el conjunto de verdad * /en el pasado, sólo un fd_set típicamente comprende menos de o igual a 32 descriptores de archivo, de hecho, ya que sólo un vector de bits fd_set para lograr un int, en la mayoría de los casos, puede incluir cualquier fd_set valor de comprobación El descriptor de archivos es responsabilidad del sistema, pero determine cuánto se puede colocar su fd_set. En ocasiones, debe verificar /modificar el valor de la macro FD_SETSIZE. * Este valor depende del sistema * y también verifica el manual man () para seleccionar () en su sistema. Algunos sistemas tienen problemas con la compatibilidad con más de 1024 descriptores de archivos. [Nota del traductor: ¡Linux es un sistema así! Encontrará que el resultado de sizeof (fd_set) es 128 (* 8 = FD_SETSIZE = 1024) aunque rara vez se encontrará con esta situación. ]
interfaz básica
SELECT es simple:
int seleccionar (int nfds, fd_set * readset, fd_set * writeset, fd_set * exceptset, struct timeval * tiempo de espera); en la que:
nfds El número de descriptores de archivos que se deben verificar. El valor debe ser mayor que el número máximo de los tres conjuntos de fd_sets, no el número total de descriptores de archivos reales. Conjunto de lectura Un conjunto de descriptores de archivo que se utilizan para verificar la legibilidad. Writeset Un conjunto de descriptores de archivo utilizados para verificar la capacidad de escritura. Exceptset se utiliza para verificar el descriptor de archivo del estado inesperado.
(Nota: el error no es un estado inesperado). El puntero timeoutNULL representa una espera infinita, de lo contrario, es un puntero a la estructura de la hora, que representa el tiempo de espera más largo.
(Si tv_usec tv_sec y son iguales a 0, el estado del descriptor de archivo no se ve afectada, pero la función es no suspendido) devuelve un descriptor de archivo correspondiente al número total de acciones de respuesta, y tres conjuntos de datos están en la posición apropiada Modificado, solo aquellos que respondieron a la operación no fueron modificados. La macro FD_ISSET se debe utilizar para encontrar el grupo de descriptores de archivos devueltos.
A continuación se muestra un ejemplo de un simple análisis de un solo FD para facilitar la lectura:
int isReady (int fd) {int rc; FDS fd_set; struct televisión timeval; FD_ZERO (&FDS ); FD_SET (fd, &FDS); tv.tv_sec = tv.tv_usec = 0; rc = seleccione (FD + 1, &FDS, NULL, NULL, &tv); si (RC < 0) return -1; 1 :? 0; FD_ISSET (FDS fd, &); return}, por supuesto, si tomamos como puntero NULL, a continuación, pasó fd_set, lo que significa que sucede que esta operación no está interesado, pero seleccione () sigue esperando Hasta que pase o supere el tiempo de espera.
2, la función de selección necesita soporte de controlador. Hay una encuesta de función de miembro en la estructura de datos file_operations. El controlador puede usar la función de selección implementándola.
file_operations static struct FOPS = {ioctl: ioctl, mmap: mmap, accesibilidad: establecimiento abierto, suelte: liberación, sondeo: Voto rápido,}; wwpoll U32 (estructura de archivos * fp, poll_table * espera) {cid U32; inode = FP > > f_dentry-; d_inode;
//esto functiion wil esperar sigal que enviar por wake_up_interruptible (&CH- > pollqueue) poll_wait (fp, &CH- > pollqueue, Espere); if (ch- > pollflag) {ch- > pollflag = 0; if (cid < = WWENC_LAST) {return (POLLIN |
POLLRDNORM);} else {//wwprtk (" wwpoll: return POLLOUT de wwpoll para cid =% d \\ n ", cid); return (POLLOUT |
POLLWRNORM);}} return 0;}
[Nota del traductor: en Linux, el tiempo de espera se refiere al tiempo que el programa pasa en el estado de inactividad, no en el tiempo real del pasado. El tiempo involucrado en portar a plataformas no Linux no es igual. Transplant que comprende además en el estilo System V select () será el tiempo de espera antes de la función sale estado NULL a un indefinido, pero no es el caso en el BSD, Linux en System V compliant este respecto, el reciclaje de por lo tanto el puntero de tiempo de espera También debe prestar atención al problema. ]
STM32F103VCT6 basado DAC viene con dos no se ha encontrado tasa de conversión DAC, DAC de 12 bits, a
Primero, el proceso de inicio del sistema Linux Sobre el proceso de inicio del sistema Linux podem
lftp es un cliente ftp en Linux para iniciar sesión en un servidor FTP remoto. Use su comando espejo
A medida que crece la demanda de soluciones de PaaS y DevOps, podemos ver que las aplicaciones her
El archivo o la carpeta del espacio del host virtual de Linux no se puede eliminar. Solución
Recuerde un error de incremento automático
Visión general del hilo del nivel del usuario y del hilo del nivel del núcleo
Pasos de configuración del servidor proxy Kingate
Configuración de Centos modo abierto: abra la carpeta en la misma ventana
El panel de control de AMH VPS siempre falla al iniciar sesión en el código de verificación
Aprenda a usar el sistema Linux siete puntos de consejo
Análisis de herramientas de software de PCB bajo Linux
Apache prefork y trabajador modo de trabajo de introducción
Método de denominación de Linux para discos duros y particiones en detalle
Cómo establecer una contraseña invisible para el sistema Windows XP
Sistema Win8 /win8.1 cómo agregar la hoja de cálculo de excel número
XP no puede instalar el problema del controlador USB 2.0
Hacer un buen uso de la función de restauración en el sistema Windows 7
Sistema Win2000 /XP tres típico
¿Cómo modificar el menú de arranque de Win7?
Windows7 bajo BitLocker desbloqueado para reiniciar después de la segunda solución de bloqueo
Win9 y Windows Blue + (Win8.2)
Habilidades de aplicación del sistema operativo Win2003
¿Qué pasa si el servicio de audio de Windows 7 no se está ejecutando?