printk是行缓冲的吗?

时间:2012-11-24 05:40:07

标签: c linux linux-kernel printk

在Linux应用程序级别,所有printf消息都转到stdout,所有错误消息都转到stderr。哪里

stderr通常是无缓冲的

stdout是行缓冲的

所以在kernel space我们使用printk()时有或没有KERN_ERR以及其他级别指定宏,那么这些消息是如何缓冲的?

dmesg是否有任何单独的机制?

1 个答案:

答案 0 :(得分:8)

所有printk()所做的就是简单地将更多的字节添加到内存中的环缓冲区中(如果到达缓冲区的末尾则环绕)。因此,说它是否是行缓冲是没有意义的 - 这只是不适用。

此外,在用户空间stdout中,stderr有意义,内核和printk()不是这种情况:它不会写入stdout,因为那里在内核中没有这样的东西。

当然,有些东西负责将这个环形缓冲区的内容实际传递给用户 - 无论是在串行控制台上打印它还是用dmesg检索它,这通常会查找LF字符来分隔行。