1. 程式人生 > >linux prink太了不起了!

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核心太牛叉了,連個分級日誌都這麼牛掰,不服不行!

     今天又學了一招!