2017-02-15 9 views
5

के बीच अंतर printk और pr_info फ़ंक्शंस के बीच सटीक अंतर क्या है? और किस परिस्थितियों में, मुझे एक दूसरे को चुनना चाहिए?प्रिंटक और pr_info

+0

@CL। हाँ, मेरा बुरा। – LPs

+0

ये सभी डीबग को छोड़कर समकक्ष हैं। – 0andriy

उत्तर

5

kernel's printk.h है:

#define pr_info(fmt,arg...) \ 
    printk(KERN_INFO fmt,##arg) 
बस नाम की तरह

, pr_info KERN_INFO प्राथमिकता के साथ printk है।

+0

असल में '# परिभाषित pr_info (fmt, ...) eprintf (0, verbose, pr_fmt (fmt), ## __ VA_ARGS __)' – LPs

+0

अपवाद 'pr_debug()' बनाम 'printk (KERN_DEBUG)' और सभी डेरिवेटिव है। – 0andriy

0

विशेष रूप से pr_info पर देखकर, परिभाषा बदले में printk(KERN_INFO ... का उपयोग करेगी (जैसा कि बार्सिलोना_डेलपी के answer में उल्लिखित है); हालांकि, उत्तर का स्रोत स्निपेट स्वरूप रैपर pr_fmt(fmt) (जैसा कि एलपी comment द्वारा उल्लिखित) को बाहर करने के लिए प्रतीत होता है।


तुम क्यों printk(KERN_INFO ... से अधिक pr_info उपयोग कर सकते हैं करने के लिए अंतर कस्टम आप सेट कर सकते हैं स्वरूपण है।

printk(KERN_INFO "mymodule: hello there\n"); 
// outputs "mymodule: hello there" 

या: आप printk के साथ अपने मॉड्यूल में अपने संदेशों उपसर्ग करना चाहते हैं, एक विधि स्पष्ट रूप से प्रत्येक पंक्ति पर अपने उपसर्ग जोड़ने के लिए है,

printk(KERN_INFO KBUILD_MODNAME " hello there\n"); 
// outputs "mymodule: hello there" 

लेकिन यदि आप pr_info का उपयोग करें (और अन्य pr_* कार्यों), तो आपको प्रारूप को फिर से परिभाषित कर सकते हैं और आसानी से अतिरिक्त काम के बिना pr_info का उपयोग करें:

... (includes) 
#ifdef pr_fmt 
#undef pr_fmt 
#endif 
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 

... 
{ 
    ... 
    pr_err("hello there\n"); 
    // outputs "mymodule: hello there" (assuming module is named 'mymodule') 
    ... 
} 
... 

भी देखें:

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