2012-08-17 16 views
10

Al desarrollar un módulo kernel en Linux, no se permite el uso de la biblioteca estándar C.
Sin embargo, en caso de que necesite usar alguna funcionalidad común como strcat(), ¿a dónde debo ir?stdlib.h alternativa en kernel Linux?

Respuesta

9

Lo que no está implementado en el kernel de Linux, usted tiene que aplicar a sí mismo o pedir prestado de otro módulo del núcleo de código abierto. Sin embargo, encontrará que strcat se implementa en el kernel.

Consulte la documentación de kernel API. Específicamente la sección Basic C Library Functions para su pregunta general, y la sección String Manipulation para su pregunta específica acerca de strcat.

Deberá incluir linux/string.h.

No sé por qué la documentación API del kernel no muestra realmente el archivo de encabezado que debe incluir para obtener la función. Pero si está buscando algo, puede restringir su búsqueda a /include/linux porque es allí donde van los archivos de encabezado si tienen funciones que se comparten entre las diferentes partes del kernel.

Los archivos de encabezado fuera de /include/linux contienen definiciones solo para los archivos de origen que residen en el mismo directorio que el encabezado. La excepción es /arch/.../include, que contendrá encabezados específicos de la arquitectura en lugar de los independientes de la plataforma.

+0

¿Hay una lista de los archivos de encabezado en los que se guardan este tipo de funciones? (Como ha mencionado 'linux \ string.h') – Fairview

+0

@Fairview: No es que pudiera encontrarlo, lo cual es extraño. Supongo que tendrás que encontrar la función que deseas en la API del kernel y luego buscarla en '/ include/linux'. Agregué más detalles en mi respuesta sobre los archivos de encabezado en el núcleo y por qué puede restringir su búsqueda a '/ include/linux' y sus subdirectorios. – indiv

-1

Lo sentimos @eq - pensando en otra función.

Por qué no

void (char *d, const char *s); 
{ 
    if (*d) 
    { 
     for (; *d; ++d) {} ; 
     --d; 
    } 
    strcpy(d, s); 
} 

que podía hacer strcpy si desea

+0

@indiv - Vaya, el pensamiento es correcto. Esas funciones se pueden lograr fácilmente. –

+0

¿Estamos todos contentos de cómo, a pesar de que una función de cadena requiere una biblioteca? –

+0

... ¿Y el kernel de Linux está escrito en C? –