Ejemplo de llamada al sistema seleccionado:
Tengamos un ejemplo simple para verificar el funcionamiento de la llamada al sistema seleccionada. Abra el shell de la línea de comandos con "Ctrl + Alt + T.”Después de la apertura de la terminal, asegúrese de tener un compilador de lenguaje C instalado en su sistema porque el código no funcionará sin él. Si no tiene uno, pruebe el siguiente comando para hacerlo.
$ sudo apt install gcc
Si desea que la llamada al sistema de selección de Linux funcione, debe tener el paquete manpages-dev instalado en su sistema según el siguiente comando. Escriba su contraseña de usuario para continuar.
$ sudo apt install manpages-dev
Puede ver la sintaxis y el funcionamiento de la llamada al sistema seleccionada utilizando el comando "man" a continuación.
$ man 2 seleccionar
La página del manual de salida para la llamada al sistema seleccionada se muestra a continuación. Salga presionando la tecla "q".
Los directorios estándar, las aplicaciones de terminal de shell de comandos y pseudo-terminal, los documentos centrados en STREAMS, FIFO, incluidas las tuberías, son todos compatibles con el módulo select (). Se desconoce la actividad de select () en los descriptores de documentos que se refieren a estos otros formatos de archivo. Así que a continuación se muestra la explicación de la llamada al sistema Select.
La descripción de la sintaxis que se muestra en la imagen de arriba se describe a continuación.
Arriba está la biblioteca que se incluirá en el código C mientras se usa la llamada al sistema de selección. Si no está incluido, el código no funciona.
La nfds declaración define el conjunto de descriptores de archivo que se evaluará. El método select () comprueba los descriptores de archivos entre 0 y nfds-1.
Tiempo readfds no es nulo, se refiere a una matriz de formato fd_set que define qué descriptores de documento deben probarse para ver si están listos para leer en la entrada y qué descriptores de documento deben estar todos configurados para leer en la salida.
Cuando el writefds el parámetro no está vacío, se refiere a una entidad de forma fd_set que define qué descriptores de documento deben probarse para saber si están listos para inscribirse en la entrada. Los descriptores de documentos deben estar preparados para componerse en la salida.
Mientras que la errorfds el parámetro no está vacío, se refiere a un objeto de tipo fd_set, que determina qué descriptores de documento deben probarse para esperar el estado de las cosas de error en la entrada; Además, los descriptores del documento deben verificarse en la salida.
Los parámetros readfds, writefds y errorfds se actualizan después de la realización para indicar que los descriptores de documentos están preparados para leerse, completamente preparados para escribir o incluso tienen un estado de excepción en espera, según corresponda. Si el bit subsiguiente se fija en la entrada y la situación relevante es válida para cada descriptor de archivo un poco por debajo de nfds, el bit subsiguiente se colocaría en ejecución efectiva.
Si bien el parámetro de tiempo de espera no está realmente vacío, conduce a una entidad de estructura temporal que determina el tiempo supremo para detener el fuego para que finalice la elección. Select () no obstruye del todo si dicho parámetro de tiempo de espera conduce a un objeto de estructura timeval con 0 elementos. Select () se detiene a menos que una ocurrencia permita que uno de los filtros se recupere con un resultado verdadero (distinto de cero), ya sea que la declaración de tiempo de espera sea una referencia vacía. Select () tiene éxito de manera efectiva y produce 0 cuando el período de espera termina incluso antes de que ocurra, lo que puede requerir que una de varias máscaras se ajuste a un valor distinto de cero.
Esta macro elimina la colección (borra todos los descriptores del documento). Se puede utilizar como el primer paso en la inicialización de una colección de descriptores de documentos.
El descriptor de documento fd se agrega a la colección por esta macro. El uso de un descriptor de documento para una colección que ya existe no sería operativo y, por lo tanto, no daría lugar a un error de excepción.
Esta macro elimina el descriptor de documento fd de la colección. Un descriptor de archivo eliminado de la colección que no existe no es operativo y, por lo tanto, no genera una excepción.
La llamada al sistema select () altera la información o los datos de las colecciones según las reglas mencionadas anteriormente. La macro FD ISSET () puede descartarse invocando select () para ver si un descriptor de documento permanece disponible en una colección.
Creemos un nuevo archivo de tipo C llamado "nuevo.c ”como se muestra a continuación.
$ nano nuevo.C
Se ha abierto el editor GNU. Escriba el código de abajo en él. El código contiene encabezados, función principal con algunos descriptores de archivo como se elaboró anteriormente. También contiene una estructura para el valor del intervalo de tiempo. Luego, usamos la llamada al sistema de selección para verificar el error en la declaración "si". Presione "Ctrl + S" para guardar este código y "Ctrl + X" para salir del editor.
Ahora compile el código usando la instrucción "gcc".
$ gcc nuevo.C
Ejecute el código y no agregue ninguna entrada. La salida dirá "seleccionar tiempo de espera."
PS ./a.fuera
Nuevamente, ejecute el código y proporcione alguna entrada en la terminal, e.gramo., "Aqsa.”Dará como resultado que los“ datos están disponibles."
Conclusión:
Hemos implementado la llamada al sistema select en Ubuntu 20.04 sistema Linux. El código debería funcionar en todas las distribuciones de Linux por igual y correctamente. Espero que este artículo sea fácil de implementar y comprender.