linux prink太了不起了!

        作为一个码农,用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内核太牛叉了,连个分级日志都这么牛掰,不服不行!

扫描二维码关注公众号,回复: 4504041 查看本文章

     今天又学了一招!

猜你喜欢

转载自blog.csdn.net/setagllib/article/details/42423759
今日推荐