当前位置: 代码迷 >> 综合 >> linux prink太了不起了!
  详细解决方案

linux prink太了不起了!

热度:98   发布时间:2024-01-20 03:42:20.0

        作为一个码农,用C语言也用了十几年,现在在开发一个读卡器模块,想做一个日志分级输出的机制。于是就想到了linux kernel中的printk,想参考参考

。发现printk的实现也没啥,主要利用了可变参数机制。日志分级输出的实现在,vprintk中。

      vprintk中分析了prinkt的第一个参数fmt, 对于日志级别字符串,如KERN_DEBUG进行了解析。按骥索图,看看KERN_DEBUG的定义,如下:

          #define KERN_DEBUG      "<7>"   /* debug-level messages                 */

        所以如果用户调用了语句,

        printk(KERN_DEBUG"%d",10);的话会被替换成

        printk("<7>" "%d",10);

        注意红色部分,两个连续的字符串会被编译器连接在一起形成一个字符串!我十分惊讶!对此,我又写了一个测试程序,就是打印几个字符串,如下:

       printf("Hello,China"   "Happy New Year"   "Oh,My God\r\n");

      然后,终端输出了“Hello,ChinaHappy New Yearoh,My God”。

      linux内核太牛叉了,连个分级日志都这么牛掰,不服不行!

     今天又学了一招!