Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C printk是行缓冲的吗?_C_Linux_Linux Kernel_Printk - Fatal编程技术网

C printk是行缓冲的吗?

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()所做的只是简单地向内存环形缓冲区中添加几个字节(如果到达缓冲区的末尾,则进行环绕)。所以,说它是否是行缓冲的是没有意义的——这不适用 另外,虽然

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

stderr通常是无缓冲的,并且

stdout是行缓冲的

因此,在
kernel space
中,当我们使用
printk()
时,无论是否使用
KERN\u ERR
和其他指定宏的级别,那么如何缓冲这些消息呢

dmesg
是否有任何单独的机制?

所有
printk()
所做的只是简单地向内存环形缓冲区中添加几个字节(如果到达缓冲区的末尾,则进行环绕)。所以,说它是否是行缓冲的是没有意义的——这不适用

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


诚然,有些东西负责将这个环形缓冲区的内容实际交付给用户——无论是在串行控制台上打印还是使用
dmesg
检索,这通常会将LF字符分隔成几行。

如果您能回答我下面的问题,这将非常有帮助:1。在恐慌的时候,我的pr_信息打印很少没有刷新到串行控制台。我能做些什么来获得它们(考虑到让它们出现不是一种选择)?2.有没有办法刷新内核缓冲区?谢谢。