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.我有办法刷新内核缓冲区吗? 非常感谢。 –