Cómo usar la llamada del sistema seleccionar en c

Cómo usar la llamada del sistema seleccionar en c
La llamada del sistema select () permite que un sistema realice un seguimiento de varios descriptores de archivos. Por lo tanto, la llamada Select System espera a que uno de los descriptores o un todo resulte "listo" para un tipo particular de actividad de E/S (E.gramo., entrada posible). Si el proceso de E/S posterior (E.gramo., leer (2)) se puede realizar a pesar del bloqueo, el descriptor del archivo se considera capaz. El método select () describe si un descriptor de documentos está disponible para leer, prepararse para escribir o en un estado de excepción. Supongamos que la situación establecida es falsa para los descriptores de archivos establecidos. En ese caso, los bloqueos de llamadas Select () del sistema antes de las circunstancias mencionadas son válidas para el mínimo uno de los descriptores de documentos establecidos, igual al intervalo de tiempo de espera indicado.

Ejemplo para seleccionar llamadas al sistema:

Tengamos un ejemplo simple para ver el funcionamiento de la llamada del sistema seleccionar. Abra el shell de línea de comandos usando el "Ctrl+Alt+T."Después de la apertura del 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 funcione la llamada del sistema Select Linux, 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 instalación manPages-devel

Puede ver la sintaxis y el funcionamiento de la llamada del sistema seleccionar utilizando el siguiente comando "hombre".

$ Man 2 Select

La página del hombre de salida para la llamada del sistema seleccionar se muestra a continuación. Réjalo presionando la tecla "Q".

Los directorios estándar, las aplicaciones de terminal de shell de comando y pseudo terminal, los documentos centrados en las transmisiones, FIFOS, incluidas las tuberías, son 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. Entonces, a continuación se muestra la explicación de la llamada Seleccionar sistema.

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 del sistema Seleccionar. Si no está incluido, el código no funciona.

El nfds La declaración define el conjunto de descriptor de archivo que se evaluará. El método select () verifica los descriptores de archivo entre 0 y NFDS-1.

Mientras readfds no es nulo, se refiere a una matriz de formulario FD_SET que define qué descriptores de documentos deben probarse para que la preparación lea en la entrada y qué descriptores de documentos deben estar configurados para leer en la salida.

Cuando el Writefds El parámetro no está vacío, se refiere a una entidad de formulario FD_SET que define qué descriptores de documentos deben probarse para su preparación para inscribir en la entrada. Los descriptores del documento deben estar preparados para componer 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 documentos deben probarse para esperar el estado 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 del logro para indicar que los descriptores de documentos están preparados para haber leído, completamente preparados para escribir o incluso tener un estado de excepción esperando, en consecuencia. Si el bit posterior se fija en la entrada y la situación relevante es válida para cada descriptor de archivos un poco bajo NFDS, el bit posterior se colocaría en un logro efectivo.

Si bien el parámetro de tiempo de espera no está realmente vacío, conduce a una entidad de tiempo de tiempo de estructura que determina el tiempo supremo para mantener su fuego para la elección de terminar. Select () no obstruye del todo si dicho parámetro de tiempo de espera conduce a un objeto de tiempo de tiempo de estructura con 0 elementos. Select () se detiene a menos que un hecho permita que uno de los filtros se recupere con un resultado verdadero (no cero), si la declaración de tiempo de espera es una referencia vacía. Select () tiene éxito de manera efectiva y produce 0 cuando el período de espera finaliza incluso antes de que ocurra la ocurrencia, lo que podría 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 de documentos). Se puede usar como el primer movimiento en la inicialización de una colección de descriptores de documento.

El descriptor del documento FD se agrega a la colección por esta macro. El uso de un descriptor de documento a una colección que ya ha existido sería no operacional y, por lo tanto, no resulta en un error de excepción.

El descriptor del documento FD se elimina de la colección por esta macro. Un descriptor de archivo eliminado de la colección que no existe no es operativo y, por lo tanto, no da como resultado una excepción.

El sistema select () altera la información o los datos de las colecciones según las reglas mencionadas anteriormente. La macro fd isset () se puede descartar invocando select () para ver si un descriptor de documentos 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

El editor de GNU ha sido abierto. Escribe el código debajo de él. El código contiene encabezados, función principal con algunos descriptores de archivos como se elaboran anteriormente. También contiene una estructura para el valor del intervalo de tiempo. Luego hemos utilizado la llamada Seleccionar sistema para verificar el error en la instrucción "IF". Presione "Ctrl+S" para guardar este código y "Ctrl+X" de dejar el editor.

Ahora compile el código utilizando la instrucción "GCC".

$ GCC nuevo.C

Ejecute el código y no agregue ninguna entrada. La salida dirá "Seleccione Tiempo de espera."

ps ./a.afuera

Nuevamente, ejecute el código y da alguna entrada en el terminal, e.gramo., "AQSA."Souttará que" los datos están disponibles."

Conclusión:

Hemos implementado la llamada SELECT SYSTEM en el Ubuntu 20.04 Sistema Linux. El código debe funcionar en todas las distribuciones de Linux de manera igual y correcta. Espero que encuentre este artículo fácil de implementar y comprender.