Cómo usar la llamada del sistema de encuestas en c

Cómo usar la llamada del sistema de encuestas en c
La función Poll () permite que los programas multiplicen la entrada y salida a través de una serie de descriptores de archivos. En otras palabras, la llamada del sistema Poll () es análoga a seleccionar () llamada del sistema para trabajar, ya que mantiene su fuego para uno de varios descriptores de archivos al estar disponible para E/S. Poll () examina el descriptor de documento asignado para enumerar los eventos en incidentes a cada elemento de la matriz que le apunta por los descriptores de archivos. El método Poll () puede determinar cuál de los descriptores de archivos le leerá o escribirá detalles, que han visto estos incidentes. En esta guía, usaremos Ubuntu 20.04 para comprender el concepto del sistema POLL () Llama en Linux paso a paso.

Sintaxis:

int encuesta (struct pollfd *Ufds, unsigned int nfds, int timeOut);

El argumento "fds" determina que los descriptores de documentos se verificarán, así como los incidentes de importancia para cada. Es una referencia a una matriz que tiene un elemento para cada descriptor de documentos abiertos. Los elementos de la matriz son las estructuras POLLFD, donde FD denota un descriptor de documentos abiertos, y todos los acontecimientos y reeventes, generalmente llamados bailes de bits, se generan creando una amalgama de los indicadores de eventos correspondientes:

Pollin:

Además de los datos de alta prioridad, los datos de información se pueden leer privados de incluso ser bloqueados. Además, si el mensaje de respuesta es de tamaños cero, esta señal de indicador se genera para las secuencias en reventes. Esta bandera tiene el mismo significado que Pollrdnorm | Banda de polla.

Pollrdnorm:

Sin interrupción, se pueden leer datos de información ordinaria. Información sobre Prioridad Primaria La banda 0 se puede leer a pesar de la interrupción de las transmisiones. Y si el mensaje de respuesta es de longitud cero, esta señal se genera en reeventaciones.

Pollrdband:

Se leerán datos de preocupación principal a pesar de causar retrasos. Se puede leer información sobre rangos prioritarios mayores que cero a pesar de interferir en las transmisiones. Y si la respuesta del mensaje es de cero duración, esta señal se propaga en reventes.

Pollpri:

Puede haber algunas excepciones al descriptor del documento. La información con una prioridad superior puede leerse privada de ser bloqueada. Además, si la respuesta es una duración cero, esta señal se propaga para las corrientes en reventes.

Encuesta:

Los usuarios pueden escribir utilizando la bandera de Pollout. Privado de detener los datos típicos se pueden registrar. La información sobre la banda de preferencia 0 se puede grabar a pesar de la interrupción en las transmisiones.

Pollwrnorm:

Funciona lo mismo que Pollout.

Pollwrband:

Los datos más prioritarios se escribirán utilizando este indicador. Se puede registrar información sobre rangos de preferencias mayores que cero para transmisiones sin ser bloqueados. Esta actividad solo evalúa las bandas que ya se han escrito como mínimo una vez, ya que no se ha escrito una banda de preferencia en esta transmisión.

Pollerr:

Es una condición de error y solo ocurre cuando el sistema o el flujo han encontrado un problema. Este símbolo solo se aplica a los reventes de Bitmask; a lo largo de las actividades participante, se pasa por alto.

Pollhup:

Especifica la condición de colgar y solo ocurre cuando la conexión al sistema ha sido deshabilitada. Esta ocurrencia y encuesta son igualmente compatibles; Una vez que ha surgido un problema, nunca se escribirá un flujo.

Pollnval:

Esto especifica la solicitud inválida o inusual. Esta actividad, sin embargo, no excluye la participación en Pollin, Pollrdnorm, Pollrdband o PollPri. Este símbolo solo se aplica a los reventes de Bitmask; se pasa por alto en el participante del evento.

Ejemplo de llamada del sistema de votación:

Desempeña el mismo papel que select (), aunque a mayor escala. Poll () está disponible en cualquier máquina Linux basada en GLIBC. Los núcleos más antiguos imitan la encuesta () con select () en toda la biblioteca C. Sin embargo, los programas no deberían necesitar hacer una distinción. Aquí hay un ejemplo de cómo se siente la encuesta (). Así que abra el terminal de la línea de comando primero usando la tecla de acceso directo "Ctrl+Alt+T."Después de abrirlo, tenemos que crear un archivo de tipo C para escribir un código de tipo C. Para esto, hemos estado usando el editor nano. Entonces, pruebe el siguiente comando nano en el terminal junto con el nombre del archivo C.

$ nano nuevo.C

Ahora se ha abierto el editor nano del archivo C "nuevo". Primero debes incluir algunas bibliotecas, especialmente la "encuesta.H ”Biblioteca. Se ha especificado que la función principal tiene un tipo de retorno entero con dos argumentos en su parámetro, e.gramo., Argc y Argv. Luego hemos declarado un descriptor de archivo FD y una matriz de tipo de personaje llamada "BUF."Después de eso, se ha definido una variable de tipo de estructura llamada PFDS POLLFD del tamaño 2. A continuación, se ha declarado una llamada de sistema abierto para obtener el valor de la matriz de tipo de caracteres y asignarlo al descriptor de archivo "FD" como se ve en la imagen. Mientras que el descriptor del archivo es "1", la estructura "PFDS" se actualizará con algunos datos utilizando el indicador de polin dentro de él. Ahora hemos definido una función de llamada de sistema encuestado (). El primer parámetro de la llamada del sistema Poll () es la estructura UFDS utilizada en el código. El segundo parámetro especifica el total de estructuras PODFD en la serie FDS.

Y el último parámetro muestra el valor de tiempo de espera de tipo entero para la llamada del sistema de votación. Si los PFD son reventados y se agregan con un valor de 0, entonces la llamada del sistema de lectura leerá los datos del búfer. La instrucción "IF" se usará para verificar si la instrucción Read ha devuelto su valor a un entero y escribir datos. Si la estructura "PFDS" está en la posición "1" mientras reviva e ingresa los datos, la llamada del sistema de lectura usará los datos de un búfer mientras usa el descriptor "FD".

Guardar lo nuevo.cile c y cerrarlo. Ahora compítelo usando el compilador GCC.

$ GCC nuevo.C

Mientras ejecutamos este código, agregamos datos en una encuesta para que se lean, y escribe datos nuevamente como en la salida a continuación.

ps ./a.afuera

Conclusión:

En este artículo descrito anteriormente, hemos discutido la llamada del sistema POLL () en el lenguaje C. Espero que encuentre este tutorial útil y eficiente mientras trabaja en el sistema operativo de Linux.