c语言中printk用法,printk和printf的区别
&&&
大部分常用的C库函数在Linux内核中都已经得到了实现。在所有没有实现的函数中,最著名的就数printf()函数了。内核代码虽然无法调用
printf()函数,但它可以调用printk()函数。printk()函数负责把格式化好的字符串拷贝到内核日志缓冲上,这样syslog程序就可
以通过读取该缓冲区来获取内核信息。printk()的用法很像printf():
&
printk("Hello world!A
string:%s and an integer:%d\n",a_string,an_integer);
&
printk()和printf()之间的一个显著区别在于printk()允许通过指定一个标志来设置优先级。syslog会根据这个优先级标
志来决定在什么地方显示这条系统信息。下面是一个使用这种优先级标志的例子:
&
printk(KERN_ERR "this is an
error!\n");
&&&&&
printk()函数是直接使用了向终端写函数tty_write()。而printf()函数是调用write()系统调用函数向标准输出设备写。所以
在用户态(如进程0)不能够直接使用printk()函数,而在内核态由于他已是特权级,所以无需系统调用来改变特权级,因而能够直接使用
printk()函数。
printf是咋使用了标准的C库函数的时候才能使用的,而内核中无法使用标准的C库函数,所以就连最常见的printf都不能使用。
例如子printk函数的字符串参数中使用了KERN_ALERT,它实际上扩展为字符串:“<1>”,而这部分信息没有输出到终端。实际上,这部分是内核信息的日志级别,只有超过了当前日志级别的信息才会输出到终端。当前内核的日志级别可以在/proc/sys/kernel/printk文件中看到。这个文件包含了四个整数,其中前两个是控制台的当前日志级别和默认日志级别。我们在printk的参数中使用较高的日志级别就是要保证信息得到输出。在头文件里一共定义了8个级别(0-7)的输出,从高到低分别由如下常量表示:
KERN_EMERG : 最高级别,一般只用来打印崩溃信息
KERN_ALERT : 需要立即处理的信息
KERN_CRIT : 关键信息,一般用来显示严重的硬件和软件错误
KERN_ERR : 用来显示硬件错误
KERN_WARNING : 显示不会造成严重错误的警告信息
KERN_NOTICE : 显示需要引起注意的信息
KERN_INFO : 显示一般信息,例如驱动所发现的硬件列表
KERN_DEBUG : 用来显示调试信息
printk与printf的一个区别printk是“行驱动”的,也就是说只有收到一个换行符数据才会真正输出到终端,否则就不会有任何信息输出。另一个值得注意的问题是我们在调试嵌入式设备的时候,经常是从串口获得显示信息,如果我们使用printk过于频繁的话,串口的传输速度就会成为瓶颈,这样会造成系统的性能下降甚至停止反应。
c语言中printk用法,printk和printf的区别相关推荐
- Java语言中print、println和printf的区别
前言 如果你是java的初学者,那相信你一定会有过疑惑,就是java中三大输出方式到底有什么区别.特别是先学过其他语言的,就更容易搞混.所以,小编就通过具体实例来详细缕一缕,帮助你理解记忆,消除疑惑. ...
- C语言中const用法详解
C语言中const用法详解 const修饰普通变量 const作用在于定义一个常量,比如const int a = 10,代表a的值不能被直接修改了,是一个常量,但仍可以通过指针的方式间接修改,如下图 ...
- c语言for什么意思,C语言中for用法是什么?
C语言中for用法是: for 循环语句的一般形式为:for (表达式1; 表达式2; 表达式3) { 语句; } 首先要强调两点: 1) 表达式1.表达式2和表达式3之间是用分号;隔开的,千万不要写 ...
- c语言中用了continue头文件,c语言中continue用法是什么?
c语言中continue用法是什么? continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环. continue语句只用在 while.for 循环中,常与 if 条件语句一起使用, ...
- java 函数fun_c语言中fun用法详解_后端开发
Java Dao层的作用_后端开发 Dao层叫数据访问层,属于一种比较底层,比较基础的操作,可以具体到对于某个表或某个实体的增删改查,其Dao层的作用是对数据库的访问进行封装,从而不涉及业务,实现解耦 ...
- c语言中funx的作用,c语言中fun用法详解
C语言中fun用法详解 fun函数是自定义的C/C++语言函数,函数功能多样.该函数名为"函数"英文function的简写,一般在示例和试题中使用,通常在主函数中被调用. C/C+ ...
- Go语言中的fmt.Print, fmt.Printf, fmt.Println的区别和使用场景
Go语言中的fmt.Print, fmt.Printf, fmt.Println的区别和使用场景 fmt 包的介绍 fmt.Print === 原样输出 fmt.Printf === 格式输出 fmt ...
- java if和else if的区别_关于C语言中if,elseif和else的区别在哪里
关于C语言中if,elseif和else的区别在哪里以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 关于C语言中if,e ...
- C语言中,scanf与scanf_s的简单区别
C语言中,scanf与scanf_s的简单区别 scanf()不会检查输入边界,可能造成数据溢出,scanf_s()会进行边界检查. 如name[5], scanf("%s",na ...
最新文章
- 阿里云安全肖力:安全基础建设是企业数字化转型的基石
- 查看centos中mysql的日志的命令_CentOS系统中常用查看日志命令
- 已经感冒好长一段时间了 不过今天我的新blog开张
- java中获取文件总行数_关于java:如何以有效的方式获取文件中的行数?
- SAP ABAP Netweaver里的SE80事务码是如何响应用户请求的
- 计算机主机接线视频教程,电脑主板跳线怎么接?电脑机箱与主板跳线接法图解教程...
- 用Windows 10自带的paint/画图 软件删除图片中的文字,并且添加新文字,适合学术应用,有截图
- 运用范式的规范数据库设计的好处
- 在ubuntu下打开.TXT文件,中文显示为乱码
- js+运行+php+文件,php中运行JS
- DB2with的定义与用法
- 人人都能看懂的LSTMGRU
- php创建mysql分区_创建mysql表分区的方法_MySQL
- 商品库存管理系统(c语言)
- adminLTE模态框弹出页面样例
- 基于MATLAB的条形码二维码检测系统
- [Node.js] rsaaes 加密解密
- 教育网Linux下赶mule
- [转]在低调中修炼自己
- 手机号,身份证号,姓名等校验
热门文章
- vue项目全局把px转换成rem
- 目标检测语义分割:隧道裂缝裂痕检测实战,有数据+代码
- 冒泡排序算法-DEMO
- BERT gated multi-window attention network for relation extraction 用于关系抽取的BERT门控多窗口注意力网络
- MASK RCNN 之RPN
- android字体变斜,TextView设置倾斜字体样式(android:textStyle=bold|italic)后,右边字显示不全...
- js 前进 后退 刷新
- 高通camera驱动 camx相关内容 (二)
- 干货|苹果官网色彩搭配的“黄金法则”
- Jcrop是一个功能强大的图像裁剪引擎