在Linux应用程序级别,所有printf消息都转到stdout
,所有错误消息都转到stderr
。哪里
stderr通常是无缓冲的
stdout是行缓冲的
所以在kernel space
我们使用printk()
时有或没有KERN_ERR
以及其他级别指定宏,那么这些消息是如何缓冲的?
dmesg
是否有任何单独的机制?
答案 0 :(得分:8)
所有printk()
所做的就是简单地将更多的字节添加到内存中的环缓冲区中(如果到达缓冲区的末尾则环绕)。因此,说它是否是行缓冲是没有意义的 - 这只是不适用。
此外,在用户空间stdout
中,stderr
有意义,内核和printk()
不是这种情况:它不会写入stdout
,因为那里在内核中没有这样的东西。
当然,有些东西负责将这个环形缓冲区的内容实际传递给用户 - 无论是在串行控制台上打印它还是用dmesg
检索它,这通常会查找LF字符来分隔行。