c – printk是行缓冲的吗?

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

stderr通常是无缓冲的

stdout是行缓冲的

所以在内核空间,当我们使用带有或不带有KERN_ERR的printk()和其他级别指定宏时,这些消息是如何缓冲的?

dmesg有没有单独的机制?

解决方法:

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

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

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

上一篇:标记列删除恢复


下一篇:如何杀死处于进程状态D的进程