3

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

stderr 通常是无缓冲的,并且

stdout 是行缓冲的

因此,kernel space当我们使用printk() 有或无KERN_ERR以及其他级别的指定宏时,如何缓冲这些消息?

dmesg有什么单独的机制吗?

4

1 回答 1

8

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

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

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

于 2012-11-24T06:00:10.623 回答