printk
和pr_info
函数之间的确切区别是什么?在什么条件下,我应该选择一个而不是另一个?
答案 0 :(得分:11)
#define pr_info(fmt,arg...) \
printk(KERN_INFO fmt,##arg)
就像名称一样,pr_info是具有KERN_INFO优先级的printk。
答案 1 :(得分:4)
专门查看pr_info
时,定义将依次使用printk(KERN_INFO ...
(如barcelona_delpy的answer中所述);但是,答案的源代码段似乎排除了格式包装pr_fmt(fmt)
(如LP comment所述)。
差异与您pr_info
相比printk(KERN_INFO ...
优于printk
的原因是您可以设置的自定义格式。如果您希望在模块中使用printk(KERN_INFO "mymodule: hello there\n");
// outputs "mymodule: hello there"
作为前缀,则方法是在每行显式添加前缀:
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')
...
}
...
而无需额外的工作:
-> union.stream().distinct()
| Expression value is: java.util.stream.DistinctOps$1@4493d195
| assigned to temporary variable $58 of type Stream<Tuple>
另见: