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