printk是行缓冲?

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

标准错误通常是无缓冲的

标准输出是行缓冲的

所以在kernel space当我们使用printk()有或没有KERN_ERR和其他级别指定macros,那么这个消息是如何被缓冲的?

dmesg是否有单独的机制?

所有printk()所做的就是简单地将更多的字节添加到内存环缓冲区(如果达到缓冲区末尾,则绕回)。 所以,说是不是线路缓冲是没有意义的 – 这只是不适用。

而且,在用户空间stdoutstderr是有道理的,在内核和printk()情况并非如此:它不写入stdout因为内核中没有这样的东西。

当然,实际上把这个环形缓冲区的内容传送给用户需要注意,无论是在串行控制台上打印还是用dmesg检索它,这通常会查找LF字符来分隔行。