在Linux应用程序级别上,所有printf消息都转到stdout
,所有err消息都转到stderr
。 哪里
标准错误通常是无缓冲的
标准输出是行缓冲的
所以在kernel space
当我们使用printk()
有或没有KERN_ERR
和其他级别指定macros,那么这个消息是如何被缓冲的?
dmesg
是否有单独的机制?
所有printk()
所做的就是简单地将更多的字节添加到内存环缓冲区(如果达到缓冲区末尾,则绕回)。 所以,说是不是线路缓冲是没有意义的 – 这只是不适用。
而且,在用户空间stdout
, stderr
是有道理的,在内核和printk()
情况并非如此:它不写入stdout
因为内核中没有这样的东西。
当然,实际上把这个环形缓冲区的内容传送给用户需要注意,无论是在串行控制台上打印还是用dmesg
检索它,这通常会查找LF字符来分隔行。