2012-11-24 46 views
3

在Linux應用程序級別,所有printf消息都會轉到stdout,並且所有err消息轉到stderr。凡printk是行緩衝?

標準錯誤通常是緩衝和

stdout是行緩衝

因此,在kernel space當我們使用printk()帶或不帶KERN_ERR及其他級別指定宏觀那麼這個消息是如何緩衝?

請問dmesg有任何單獨的機制?

回答

8

printk()所做的就是簡單地在內存環緩衝區中添加幾個字節(如果到達緩衝區末尾,則繞回)。所以,說它是否是線路緩衝是沒有意義的 - 這只是不適用。

此外,雖然在用戶空間stdoutstderr是有意義的,這是不是在內核和printk()的情況:它不會因爲在內核中沒有這樣的事情寫stdout

當然,有些東西會照顧實際上向用戶提供此環形緩衝區的內容 - 無論是在串行控制檯上打印它還是使用dmesg來檢索它,並且這通常會查找LF字符以分隔行。

+0

如果您可以回答我的下列查詢將會非常有幫助: 1.在發生恐慌時,很少有pr_info打印不會刷新到串行控制檯。我能做些什麼來獲得它們(考慮讓它們出現不是一種選擇)? 2.我有辦法刷新內核緩衝區嗎? 非常感謝。 –