Programación en C

Cómo utilizar Select System Call In C

Cómo utilizar Select System Call In C
La llamada al sistema select () permite a un sistema realizar un seguimiento de varios descriptores de archivos. Por lo tanto, la llamada al sistema seleccionada espera a que uno de los descriptores o un todo resulte estar "listo" para un tipo particular de actividad de E / S (p.gramo., entrada posible). Si el proceso de E / S subsiguiente (e.gramo., read (2)) se puede realizar a pesar del bloqueo, el descriptor de archivo se considera apto. El método select () describe si un descriptor de documento está disponible para lectura, preparado para escritura o en un estado de excepción. Suponga que la situación indicada es falsa para todos los descriptores de archivo indicados. En ese caso, los bloques de llamada al sistema select () antes de las circunstancias mencionadas son válidos para al menos uno de los descriptores de documento indicados, igual al intervalo de tiempo de espera indicado.

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.

Las mejores aplicaciones de mapeo de gamepad para Linux
Si te gusta jugar juegos en Linux con un gamepad en lugar de un sistema de entrada de teclado y mouse típico, hay algunas aplicaciones útiles para ti....
Herramientas útiles para jugadores de Linux
Si le gusta jugar juegos en Linux, es probable que haya utilizado aplicaciones y utilidades como Wine, Lutris y OBS Studio para mejorar la experiencia...
Juegos HD remasterizados para Linux que nunca tuvieron un lanzamiento de Linux antes
Muchos desarrolladores y editores de juegos están creando una remasterización HD de juegos antiguos para extender la vida útil de la franquicia, por f...