Linux:printk与printf的区别、echo 0 > /proc/sys/kernel/printk

1、printk与printf的区别

内核层使用printk打印,应用层调用C库的printf打印。在内核层是调用不了文件系统中C库的printf只能用printk。两者之间的一个显著区别在于printk允许通过指定一个标志来设置优先级(在include/linux/kern_levels.h中定义),不写则默认为级别4(MESSAGE_LOGLEVEL_DEFAULT),级别高于设定的输出级别才可以显示(可在include/linux/printk.h修改宏CONSOLE_LOGLEVEL_DEFAULT设定输出级别,默认为7):

定义级别含义
KERN_EMERG0最高级别,紧急事件
KERN_ALERT1必须立即处理的信息
KERN_CRIT2严重的软件或硬件错误
KERN_ERR3硬件错误
KERN_WARNING4不影响严重错误的警告
KERN_NOTICE5需要引起注意的信息
KERN_INFO6一般信息
KERN_DEBUG7调试信息

在调用过程也是有些差别的,printk函数是直接使用了向终端写函数tty_write(),而printf函数是调用write()系统调用函数向标准输出设备写。

2、设置打印级别 echo 0 > /proc/sys/kernel/printk

可以先查看一下内核信息打印级别 cat /proc/sys/kernel/printk,得到的数字含义依次为:

  • 控制台日志级别:根据上表,优先级高于该级别就会被打印到控制台
  • 默认的消息日志级别:没有优先级(上面所说的“不写优先级”)的消息的消息级别
  • 最低的控制台日志级别:控制台日志级别可以被设置的最小值(也就是最高的优先级)
  • 默认的控制台日志级别:顾名思义,控制台日志级别的缺省值

手动设置输出级别

root@ubuntu:/ # echo 6 4 1 7 > /proc/sys/kernel/printk

或者单个值只设置控制台级别即可:

root@ubuntu:/ # echo 6 > /proc/sys/kernel/printk

这样优先级高于6(数值小的优先级高)对应的消息就会输出到控制台。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

R-QWERT

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值