3
在Linux應用程序級別,所有printf消息都會轉到stdout
,並且所有err消息轉到stderr
。凡printk是行緩衝?
標準錯誤通常是緩衝和
stdout是行緩衝
因此,在kernel space
當我們使用printk()
帶或不帶KERN_ERR
及其他級別指定宏觀那麼這個消息是如何緩衝?
請問dmesg
有任何單獨的機制?
在Linux應用程序級別,所有printf消息都會轉到stdout
,並且所有err消息轉到stderr
。凡printk是行緩衝?
標準錯誤通常是緩衝和
stdout是行緩衝
因此,在kernel space
當我們使用printk()
帶或不帶KERN_ERR
及其他級別指定宏觀那麼這個消息是如何緩衝?
請問dmesg
有任何單獨的機制?
printk()
所做的就是簡單地在內存環緩衝區中添加幾個字節(如果到達緩衝區末尾,則繞回)。所以,說它是否是線路緩衝是沒有意義的 - 這只是不適用。
此外,雖然在用戶空間stdout
,stderr
是有意義的,這是不是在內核和printk()
的情況:它不會因爲在內核中沒有這樣的事情寫stdout
。
當然,有些東西會照顧實際上向用戶提供此環形緩衝區的內容 - 無論是在串行控制檯上打印它還是使用dmesg
來檢索它,並且這通常會查找LF字符以分隔行。
如果您可以回答我的下列查詢將會非常有幫助: 1.在發生恐慌時,很少有pr_info打印不會刷新到串行控制檯。我能做些什麼來獲得它們(考慮讓它們出現不是一種選擇)? 2.我有辦法刷新內核緩衝區嗎? 非常感謝。 –