2011-11-24 11 views
5

Actualmente estoy escribiendo un módulo del kernel Linux, y tengo que manejar va_list en una de mis funciones, que se parece:¿Hay una función `printk()` que admita `va_list`?

void blah(int flag, va_list va) { 
    ... 
    if (flag & BLAH_1) { 
     ... 
     printk(... va here ...); // where I need the printk() with va_list support 
     ... 
    } 
    ... 
} 

así que necesito una función printk() -como que apoya varargs. Como vprintf() a printf().

I Google'd para vprintk, pero no tuve suerte para encontrarlo.

Respuesta

6

Siempre puede usar vsnprintf() para formatear un va_list en un búfer, y pasar ese búfer a printk().

Sin embargo, a vprintk() function seems to exist in the kernel.

+0

¡Oh, gracias! Nunca me di cuenta de que podría usar 'vsnprintf()', aunque necesito ocuparme del tamaño del buffer :) –

5

Sí, es posible y la función que tiene que utilizar es vprintk (cadena de formato, va_list); No tiene que pensar en el tamaño del búfer. Simplemente utilízalo a partir de printk.

Cuestiones relacionadas