en la definición macro incluir /Linux /kernel.h, primero para poner su código:
/** * container_of - emitir un miembro de una estructura a la estructura que contiene * @ptr * @type: el tipo de la estructura del contenedor en la que está incrustado. * @member: el nombre del miembro dentro de la estructura. * * /
#define container_of (ptr, tipo, miembro) ({\\ const typeof (((tipo *) 0) - > miembro) * __ MPTR = (ptr); \\ (tipo *) ((char *) __ MPTR - offsetof (tipo, miembro));} )
Es obvio que es un puntero a una variable miembro del dominio en una variable de estructura para obtener un puntero a la variable de estructura completa. Por ejemplo, hay una estructura variable, que se define como sigue:
struct demo_struct {miembro1 tipo1; member2 type2; miembro3 Type3; member4 type4;}; struct demo_struct demostración; Mientras tanto, en otro lugar, para obtener de demostración variable de un miembro del dominio en una variable puntero, por ejemplo: tipo3 * Memp = get_member_pointer_from_somewhere (); en este caso, si toda la estructura necesita para obtener un puntero que apunte a la variable, que no es sólo un puntero a un dominio variable miembro, podemos hacer: struct demo_struct * demop = container_of (Memp, demo_struct estructura, miembro3), de esta manera, obtenemos un puntero al conjunto de la variable de estructura a través de un miembro de puntero del dominio variable de una variable de estructura. Aquí para hablar de mi comprensión de container_of lograr esto: En primer lugar, vamos a container_of (Memp, demo_struct estructura, tipo3) ser ampliado de la siguiente manera de acuerdo con la definición de la macro: struct demo_struct * demop = ({\\ const typeof (((struct demo_struct * ) 0) - > miembro3) * __ MPTR = (Memp); \\ (struct demo_struct *) ((char *) __ MPTR - offsetof (struct demo_struct, miembro3));}) donde, typeof se extiende GNU C para el estándar C Su función es obtener el tipo de variable basado en la variable. Así, el papel de la segunda fila de la código se adquiere primero el uso de campo estructura typeof para tipo de variable Type3 miembro3, entonces una variable temporal define el tipo de __mptr puntero Type3, y la estructura real de la variable de dominio de la variable El valor del puntero memp se asigna a la variable temporal __mptr.
(char *) __ mptr se convierte en un puntero de byte.
(Char *) __ PMIT - offsetof (tipo, miembro)) se utiliza para determinar la estructura de dirección de inicio (de tipo char * puntero) y (tipo *) ((char *) __ PMIT - offsetof (tipo, miembro)) en Bajo la acción de (tipo *), el puntero de inicio de la estructura de la estructura de bytes se convierte en el puntero de inicio de la estructura de tipo *.
Asumir la posición de la demo de la variable de estructura en la memoria real es como se muestra a continuación: demo + ------------- + 0xA000
El sistema operativo Linux ha existido durante 20 años sin saberlo. Hace solo 20 años, recién celebr
La función de un controlador de dispositivo .linux Kernel: se utiliza para administrar los recur
Para los sistemas en Internet, es importante tener claro la situación: la red no es segura. Por lo
Conocimientos sobre particiones de Linux y grandes particiones de disco
Tutorial básico de aplicación para iptables firewall en Linux
Sogou Pinyin bajo Linux: ibus-nube-pinyin
Linux shell diferente conversión de datos binarios (binario, octal, hexadecimal, base64)
Operaciones de archivo y directorio
Cuál es el comando de apachectl en Linux
Esencial de CentOS instalado: configuración básica y archivos faltantes
Cómo ver y modificar los permisos de lectura y escritura del archivo bajo el sistema Linux
Lanzamiento de Firefox 3.6 RC1 La versión oficial se lanzará el próximo lunes
Siete pasos para eliminar el círculo de amigos de WeChat ha eliminado a tus amigos
Las características de la biblioteca de Windows 7 hacen que los archivos ya no sean desordenados
Fácil de usar la voz Win 8 extremidades de la computadora de control
Cómo modificar el editor de imágenes predeterminado del menú de clic derecho del sistema Win8
Win8.1 boot en el escritorio cómo configurar Win8.1 boot en el escritorio gráfico tutorial
Falta el icono del método de entrada del sistema Win10, cómo hacerlo
Win8 menú de inicio agregar herramienta
¿Cómo instalar ug10.0 en Win10? Método de instalación Ug10.0