久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

printk()函數(shù)的使用

 womking 2009-08-18
printk()函數(shù)的使用
printk()函數(shù)的總結(jié)

我們在使用printk()函數(shù)中使用日志級別為的是使編程人員在編程過程中自定義地進(jìn)行信息的輸出,,更加容易地掌握系統(tǒng)當(dāng)前的狀況。
對程序的調(diào)試起到了很重要的作用,。
(下文中的日志級別和控制臺日志控制級別是一個意思)

printk(日志級別 "消息文本");這里的日志級別通俗的說指的是對文本信息的一種輸出范圍上的指定,。
日志級別一共有8個級別,printk的日志級別定義如下(在linux26/includelinux/kernel.h中):
#defineKERN_EMERG"<0>"/*緊急事件消息,,系統(tǒng)崩潰之前提示,表示系統(tǒng)不可用*/
#defineKERN_ALERT"<1>"/*報告消息,,表示必須立即采取措施*/
#defineKERN_CRIT"<2>"/*臨界條件,通常涉及嚴(yán)重的硬件或軟件操作失敗*/
#defineKERN_ERR"<3>"/*錯誤條件,,驅(qū)動程序常用KERN_ERR來報告硬件的錯誤*/
#defineKERN_WARNING"<4>"/*警告條件,,對可能出現(xiàn)問題的情況進(jìn)行警告*/
#defineKERN_NOTICE"<5>"/*正常但又重要的條件,用于提醒,。常用于與安全相關(guān)的消息*/
#defineKERN_INFO"<6>"/*提示信息,如驅(qū)動程序啟動時,,打印硬件信息*/
#defineKERN_DEBUG"<7>"/*調(diào)試級別的消息*/

沒有指定日志級別的printk語句默認(rèn)采用的級別是 DEFAULT_ MESSAGE_LOGLEVEL(這個默認(rèn)級別一般為<4>,即與KERN_WARNING在一個級別上),,其定義在linux26/kernel/printk.c中可以找到,。
下面是一個比較簡單的使用
printk(KERN_INFO "INFO\n");  //這里可以使用數(shù)字代替 KERN_INFO,,即可以寫成printk(<6> "INFO\n");  
在這個格式的定義中,日志級別和信息文本之間不能夠使用逗號隔開,,因為系統(tǒng)在進(jìn)行編譯的時候,將日志級別轉(zhuǎn)換成字符串于后面的文本信息進(jìn)行連接,。

在對系統(tǒng)輸出進(jìn)行控制時,主要是討論控制臺和偽終端的輸情況,,以及系統(tǒng)日志等。

下面是控制臺日志級別的一些簡要的介紹
控制臺相應(yīng)的日志級別定義如下:
#define MINIMUM_CONSOLE_LOGLEVEL  1   /*可以使用的最小日志級別*/
#define DEFAULT_CONSOLE_LOGLEVEL  7 /*比KERN_DEBUG 更重要的消息都被打印*/

int console_printk[4] = {
DEFAULT_CONSOLE_LOGLEVEL,/*控制臺日志級別,,優(yōu)先級高于該值的消息將在控制臺顯示*/
/*默認(rèn)消息日志級別,,printk沒定義優(yōu)先級時,,打印這個優(yōu)先級以上的消息*/
DEFAULT_MESSAGE_LOGLEVEL,
/*最小控制臺日志級別,控制臺日志級別可被設(shè)置的最小值(最高優(yōu)先級)*/
MINIMUM_CONSOLE_LOGLEVEL,
DEFAULT_CONSOLE_LOGLEVEL,/* 默認(rèn)的控制臺日志級別*/
};
在進(jìn)行查看的時候,,可以使用命令 cat /proc/sys/kernel/printk來查看這四個值
可以通過修改文件/proc/sys/kernel/printk中的第一個值來更改當(dāng)前的控制臺日志級別,。

(聲明:在下面的模塊函數(shù)中控制臺所使用的日志級別均為KERN_WARNING級別)當(dāng)日志級別高于console_loglevel(控制臺日志級別)時,消息才能在控制臺顯示出來,。
假如我們寫了一個如下的模塊函數(shù):
1 #include <linux/init.h>
2 #include <linux/module.h>
3 MODULE_LICENSE("Dual BSD/GPL");
4 static int book_init(void)
5 {
6   printk(KERN_EMERG "EMERG\n");
7   printk(KERN_ALERT "ALERT\n");
8   printk(KERN_CRIT " CRIT\n");
9   printk(KERN_ERR " ERR\n");
10  printk(KERN_WARNING ""WARNING\n");
11   printk(KERN_NOTICE "NOTICE\n");
12  printk(KERN_INFO "INFO\n");
13  printk(KERN_DEBUG "DEBUG\n");
14  return 0;
    }
15static void book_exit(void)
16{
17  printk(KERN_ALERT "Book module exit\n");
    }
18  module_init(book_init);
19  module_exit(book_exit);

在控制臺(這里指的是虛擬終端  Ctrl+Alt+(F1~F6))加載模塊以后,,控制臺給出的信息為
6~9行中要求輸出的信息,,我們在偽終端(如果對偽終端不是很清楚可以看相關(guān)的內(nèi)容)上運(yùn)行命令tail -n 10 /var/log/messages查看日志文件剛才得到的運(yùn)行記錄
可以發(fā)現(xiàn)messages中的值為KERN_WARNING級別之后所要求輸出到信息值,。而如果我們在文件syslog和kern-log中查看系統(tǒng)日志文件,一般情況下可以得到所有的輸出信息

Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637057] INFO
Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637063] CRIT
Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637066] WARNING
Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637068] ERR
Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637069] ALERT
Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637070] EMERG
Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637071]  NOTICE
Jul 18 11:44:19 xiyoulinux-desktop kernel: [16100.637072] DEBUG
(不過在有些機(jī)器上運(yùn)行得到的結(jié)果并不是這樣的)
即一般情況下,,syslog和kern.log兩個文件中記錄的內(nèi)容從編程這個角度來看是基本一致的,。
在目錄/var/log/下有一下四個文件可以查看日志
syslog ,kern.log,,messages ,DEBUG 。   
syslog和kern.log一般情況下可以得到所有的系統(tǒng)輸出值,,而messages得到的是比控制臺日志級別低的輸出值,DEBUG得到的僅僅是DEBUG級別的
輸出值,。
一般情況下,,優(yōu)先級高于控制臺日志級別的消息將被打印到控制臺,。優(yōu)先級低于控制臺日志級別的消息將被打印到messages日志文件中,而在偽終端下不打印任何的信息,。
我們在進(jìn)行有關(guān)編程的時候,若使用到printk()這個函數(shù),,一般查看信息是在messages和虛擬終端下進(jìn)行查看,,而對于syslog和kern.log下是用來檢驗所有信息的輸出情況。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多