2011-11-24 1 views
5

Attualmente sto scrivendo un modulo del kernel di Linux, e ho bisogno di gestire va_list in una delle mie funzioni, che assomiglia a:Esiste una funzione `printk()` che supporta `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 
     ... 
    } 
    ... 
} 

quindi ho bisogno di una funzione printk() -come che supporta varargs. Come vprintf() a printf().

I Google per vprintk, ma non ho avuto fortuna a trovarlo.

risposta

6

È sempre possibile utilizzare vsnprintf() per formattare un va_list in un buffer e passare tale buffer a printk().

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

+0

Oh, grazie! Non ho mai capito che potrei usare 'vsnprintf()', anche se ho bisogno di prendermi cura della dimensione del buffer :) –

5

Sì, è possibile e la funzione si deve utilizzare è vprintk (stringa di formato, va_list); Non devi pensare alla dimensione del buffer. Basta semplicemente usarlo come da printk.