C printk是行缓冲的吗?
在Linux应用程序级别,所有printf消息转到C printk是行缓冲的吗?,c,linux,linux-kernel,printk,C,Linux,Linux Kernel,Printk,在Linux应用程序级别,所有printf消息转到stdout,所有err消息转到stderr。在哪里 stderr通常是无缓冲的,并且 stdout是行缓冲的 因此,在kernel space中,当我们使用printk()时,无论是否使用KERN\u ERR和其他指定宏的级别,那么如何缓冲这些消息呢 dmesg是否有任何单独的机制?所有printk()所做的只是简单地向内存环形缓冲区中添加几个字节(如果到达缓冲区的末尾,则进行环绕)。所以,说它是否是行缓冲的是没有意义的——这不适用 另外,虽然
stdout
,所有err消息转到stderr
。在哪里
stderr通常是无缓冲的,并且
stdout是行缓冲的
因此,在kernel space
中,当我们使用printk()
时,无论是否使用KERN\u ERR
和其他指定宏的级别,那么如何缓冲这些消息呢
dmesg
是否有任何单独的机制?所有printk()
所做的只是简单地向内存环形缓冲区中添加几个字节(如果到达缓冲区的末尾,则进行环绕)。所以,说它是否是行缓冲的是没有意义的——这不适用
另外,虽然在用户空间stdout
,stderr
是有意义的,但在内核和printk()
中情况并非如此:它不会写入stdout
,因为内核中没有这样的东西
诚然,有些东西负责将这个环形缓冲区的内容实际交付给用户——无论是在串行控制台上打印还是使用
dmesg
检索,这通常会将LF字符分隔成几行。如果您能回答我下面的问题,这将非常有帮助:1。在恐慌的时候,我的pr_信息打印很少没有刷新到串行控制台。我能做些什么来获得它们(考虑到让它们出现不是一种选择)?2.有没有办法刷新内核缓冲区?谢谢。