Los controladores Linux funciones asíncronas (El aio_read y La aio_write)

Los controladores Linux funciones asíncronas (El aio_read y La aio_write)

Podemos leer y operaciones de escritura usando el equipo de manejo de archivos en signal_handler funciones de lectura y escritura. Sin embargo, estas dos funciones se pueden utilizar en lugar de aio_read y aio_write respectivamente. En esta sección, la señal de excitación re-transformación y documentos aio_write funciona el aparato de procesamiento de uso aio_read a leer y escribir operaciones, el nuevo archivo de código fuente de Linux es aio_signal.c conductores. Sección 13.1.3 de este documento y el contenido del archivo signal.c escrito es básicamente el mismo, sólo tiene que añadir las siguientes dos funciones.

//  设备文件的aio_read函数
static ssize_t signal_aio_read(struct kiocb *iocb, const struct iovec *iov, unsigned long niov, loff_t pos)
{
    return signal_read(iocb->ki_filp, (char*)iov->iov_base,iocb->ki_nbytes, &pos);;
}
//  设备文件的aio_write函数
static ssize_t signal_aio_write(struct kiocb *iocb, const struct iovec *iov, unsigned long niov, loff_t pos)
{
    return signal_write(iocb->ki_filp, (char*)iov->iov_base,iocb->ki_nbytes, &pos);;
}

Los parámetros de estas dos funciones son idénticas. En el que la estructura kiocb aiocb estructura similar, muchos estructura de datos aiocb (por ejemplo aio_nbytes, aio_offset similares) puede ser adquirida por una variable miembro correspondiente en kiocb. Y puede adquirir iov tampón para la lectura y escritura de datos, se dirige aiocb.aio_buf área de memoria. Además, la longitud de bytes se puede obtener también por tampón iovec.iov_len. kiocb.ki_pos parámetros de punto de venta y puede leer y escribir datos adquieren un desplazamiento, que pueden ser utilizados. Único parámetro POS y leer, escribir función diferente. Y en aio_read aio_write parámetros de la función de punto de venta en valores reales en lugar de parámetro de tipo de punteros loff_t. Es decir, los parámetros no se pueden modificar en pos aio_read y aio_write valores de la función (modificados inútil).
Como se puede observar a partir aio_read y aio_write función para lograr lo anterior, estas dos funciones no lograron código específico, pero las llamadas y la función signal_read signal_write se ha logrado. Esto dará lugar a un problema, si la estructura file_operations también inicializa asíncrono (aio_read y aio_write) y la sincronización (leer y escribir) función, el sistema utilizará dispositivo de procesamiento de lectura y escritura síncrona o asíncrona para la lectura y escritura de archivos funciona?
Si las dos funciones de lectura y escritura síncrona y asíncrona, los usos del sistema de lectura y funciones de escritura para leer y operación de escritura del archivo de dispositivo. Si se desea utilizar y aio_write funciona el aparato de procesamiento de aio_read para leer y escribir archivos, no se puede especificar leer y funciones de escritura. Por lo tanto, los ejemplos de esta sección necesidad de modificar la estructura de los file_operations código de inicialización sigue.

static struct file_operations dev_fops =
{
.owner = THIS_MODULE,
.poll = signal_poll,
.fasync = signal_fasync,
.aio_read=signal_aio_read,
.aio_write=signal_aio_write
};

Ahora los controladores de Linux tienen ningún otro cambio, el archivo de script aplicación build.sh final para compilar e instalar Linux en esta sección de la unidad de lograr. Para impulsar las áreas de señal y la Sección 13.1.3 lograr por separado. Linux nombre de archivo de dispositivo de la unidad para lograr el establecimiento de esta sección es aio_signal.

Nota: estructura file_operations aio_read, aio_write y leer, escribir puede manejar las operaciones de E / S síncrona y asíncrona. Y sólo aio_read aio_write función para obtener datos más asíncrono de E / S, y puede ser mejor controlada I asíncrono / O. Aunque la mayoría no utilizan caracteres aio_read dispositivo y aio_write función (sólo algunos dispositivos de bloque, tales como unidades de cinta, con el fin de mejorar la eficiencia de la lectura y la escritura van a usar), pero si usted quiere tener un mayor control de la AIO, también se puede considerar el uso de aio_read y aio_write función, aunque estas dos funciones parecen más complejas que algunas de las funciones de lectura y escritura.

Supongo que te gusta

Origin www.cnblogs.com/schips/p/12577232.html
Recomendado
Clasificación