2011-11-24 15 views
5

मैं वर्तमान में एक लिनक्स कर्नेल मॉड्यूल लिख रहा हूँ, और मैं अपने काम करता है, जो की तरह लग रहा से एक में va_list संभाल करने की जरूरत है:क्या `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 
     ... 
    } 
    ... 
} 

तो मैं एक printk() की तरह समारोह जो varargs का समर्थन करता है की जरूरत है। vprintf() से printf() की तरह।

मैं vprintk के लिए Google'd था, लेकिन इसमें कोई भाग्य नहीं था।

उत्तर

6

आप vsnprintf() का उपयोग va_list को बफर में प्रारूपित करने के लिए कर सकते हैं, और उस बफर को printk() पर पास कर सकते हैं।

हालांकि, vprintk() function seems to exist in the kernel

+0

ओह, धन्यवाद! कभी एहसास नहीं हुआ कि मैं 'vsnprintf()' का उपयोग कर सकता हूं, हालांकि मुझे बफर आकार की देखभाल करने की आवश्यकता है :) –

5

हाँ, यह संभव है और समारोह आप का उपयोग करने के vprintk (प्रारूप स्ट्रिंग, va_list) है; आपको बफर आकार के बारे में सोचना नहीं है। बस इसे प्रिंटक के रूप में उपयोग करें।

संबंधित मुद्दे

 संबंधित मुद्दे