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