uso epoll detallada Obras

  

epoll es que si quieres operaciones de IO, Xianxiang epoll preguntar si leer o escribir, si en un estado leer o escribir, epoll le notificará por epoll_wait función, En este punto realizarás más operaciones de envío o recepción.

epoll es solo un mecanismo de notificación para eventos asíncronos. No realiza ninguna operación de lectura y escritura de IO. Sólo es responsable de decirle si se puede leer o escribir, pero las operaciones específicas de lectura y escritura. La capa de aplicación funciona por sí misma. También es muy bueno que epoll solo proporcione este mecanismo. Mantiene la independencia entre la notificación de eventos y las operaciones IO, lo que hace que el uso de epoll sea más flexible.

Todas las funciones utilizadas por epoll se declaran en el archivo de encabezado sys /epoll.h A continuación se presenta una breve descripción de las estructuras de datos y funciones utilizadas:

La estructura de datos typedef union utilizada. epoll_data {void * ptr; int fd; __ uint32_t U32; __ uint64_t U64;} epoll_data_t;

epoll_event struct {__uint32_t eventos; /* * epoll eventos /datos epoll_data_t; /* variable de datos del usuario * /}; estructura Epoll_event se usa para registrar eventos de interés y eventos pendientes que ocurren,

epoll_data se usa para almacenar datos relacionados con un descriptor de archivo que activa un evento, como un cliente que se conecta al servidor. el servidor se puede obtener, estos pueden ser asignados al campo fd epoll_data descriptor de archivo de lectura y escritura para luego ser

a que corresponde a este archivo socket de cliente descriptores en el descriptor de archivo llamando a la función aceptar, * ptr: Transporta los datos de la capa de aplicación a través del puntero ptr. Cuando llega la notificación del evento, no solo le dice qué tipo de evento ocurrió, sino que también le dice a los datos de la operación del evento

epoll_event El campo de eventos de la estructura indica los eventos posibles y los valores posibles del evento desencadenado:

EPOLLIN: indica que se puede leer el descriptor de archivo correspondiente; EPOLLOUT: indica que se puede escribir el descriptor de archivo correspondiente; EPOLLPRI: indica que los datos son de emergencia legible de descriptor de archivo correspondientes (expresadas en el presente documento deben llegada banda de datos); EPOLLERR: indica que el error descriptor de archivo correspondiente; EPOLLHUP: indica que el descriptor de fichero correspondiente se deja caer; EPOLLET: Indica que el descriptor de archivo correspondiente tiene un evento; funciones de

usadas: 1, declaración de función epoll_create: int epoll_create (tamaño int) Esta función genera un descriptor de archivo específico de epoll, donde se especifican los parámetros. la generación de un descriptor de rango máximo

2, epoll_ctl función de declaración de la función: int epoll_ctl (int dfpe, int op, int fd, struct epoll_event * evento) para controlar el evento en función de un descriptor de archivo, Puede registrar eventos, modificar eventos y eliminar eventos. Parámetros: dfpe: Dedicado generada por el descriptor de archivo epoll epoll_create; OP: operaciones a realizar, tales como el registro de eventos, posibles valores de registro EPOLL_CTL_ADD, EPOLL_CTL_MOD modificar, borrar EPOLL_CTL_DEL fd: descriptor de archivo asociado; caso: el punto de epoll_event puntero; devuelve 0 si, devoluciones sin éxito exitosas -13, la función epoll_wait

declaración de la función: int epoll_wait (int dfpe, struct epoll_event * eventos, int, int maxevents de tiempo de espera) la función de votación para las E /O ocurrencia del evento; parámetros: dfpe: epoll epoll_create generada por los descriptores de archivos dedicados; epoll_event: a eventos de procesamiento de retorno paso de matriz; maxevents: número de eventos por pueden manejar; tiempo de espera: la espera de evento I /O Valor de tiempo de espera; devuelve el número de eventos que ocurrieron.



En la programación de red Linux, select se usa para activar eventos durante mucho tiempo. En el nuevo kernel de linux, hay un mecanismo para reemplazarlo, que es epoll. En comparación con la selección, el mayor beneficio de epoll es que no reduce la eficiencia a medida que aumenta el número de fds de escucha. Debido a que en la implementación selecta en el kernel, se maneja por sondeo, cuanto mayor es el número de fd sondeados, más tiempo lleva. Y, en linux /cabecera posix_types.h presentar una declaración de este tipo: #define __FD_SETSIZE 1024 indica que debe seleccionar para supervisar de forma simultánea 1024 fd, por supuesto, podemos ampliar este número mediante la modificación de los archivos de cabecera y luego volver a compilar el kernel, pero esto no parece cura .

La interfaz de epoll es muy simple. Existen tres funciones: 1. int epoll_create (tamaño int); Crear un controlador epoll, el tamaño se usa para decirle al núcleo qué monitores hay. Este parámetro es diferente del primer parámetro en select () y da el valor de fd + 1 para el oyente más grande. Debe tenerse en cuenta que cuando se cree el controlador de epoll, ocupará un valor fd. Si ve /proc /process id /fd /under linux, puede ver este fd, por lo que después de usar epoll, debe Llamar a close () para cerrar, de lo contrario puede causar que fd se agote.

2 int epoll_ctl (int dfpe, int op, int fd, epoll_event struct * evento);. función de registro de eventos epoll, que es diferente de select () para decirle al núcleo al oyente qué tipo de evento que desea escuchar Evento, pero aquí para registrar el tipo de evento a ser escuchado. El primer parámetro es epoll_create valor de retorno () del segundo argumento de que la acción, representada por tres macros: EPOLL_CTL_ADD: registrar nuevos fd a la dfpe; EPOLL_CTL_MOD: cambios han sido oyentes del evento fd registrada; EPOLL_CTL_DEL: desde dfpe eliminar un fd, en tercer argumento es la necesidad de controlar el fd, el cuarto parámetro le dice al núcleo necesita escuchar nada, la estructura struct epoll_event es el siguiente:

typedef epoll_data unión {void * ptr; fd int; __uint32_t U32; __ uint64_t U64;} epoll_data_t;

struct {epoll_event __uint32_t eventos; /* * epoll eventos /datos epoll_data_t; /* el usuario de datos variables * /};

eventos puede ser el siguiente colección de macros: EPOLLIN: indica que el descriptor de archivo correspondiente se puede leer (incluyendo conector asociado normalmente cerrado); EPOLLOUT: indica que el descriptor de archivo correspondiente se puede escribir; EPOLLPRI: indica que los datos son de emergencia legible descriptor de archivo correspondientes ( Esto debería indicar que hay una llegada de datos fuera de banda; EPOLLERR: indica que el descriptor de archivo correspondiente tiene un error; EPOLLHUP: indica que el descriptor de archivo correspondiente está colgado; EPOLLET: EPOLL se establece en el modo de disparo por flanco, que es relativo al nivel de disparo. EPOLLONESHOT: escuchar sólo un incidente, cuando haya terminado de escuchar este incidente, si se tiene que seguir para escuchar a esta toma, de nuevo necesita ser añadido a esta toma epoll cola

3 int epoll_wait (int dfpe, epoll_event estructura. * eventos, int maxevents, int timeout); espere a que se generen los eventos, similar a la llamada select (). Los eventos de los parámetros utilizados para obtener un conjunto de eventos desde el núcleo, las maxevents kernel Publicidad cómo los eventos, no será mayor que el maxevents valor Crear epoll_create (tamaño, cuando el parámetro de tiempo de espera) es tiempo de espera (milisegundos vuelve inmediatamente 0, -1 para No estoy seguro, también hay dichos que está permanentemente bloqueado). Esta función devuelve el número de eventos que deben procesarse, como devolver 0 para indicar que se ha agotado el tiempo.

Copyright © Conocimiento de Windows All Rights Reserved