On Linux application level all printf messages go to stdout and all err messages goto stderr. Where

stderr is usually unbuffered and

stdout is line-buffered

So at kernel space when we use printk() with or without KERN_ERR and such other level specifying macro then how this messages are buffered?

Does dmesg has any separate mechanism?

有帮助吗?

解决方案

All that printk() does is to simply add few more bytes into in-memory ring-buffer (and wrap around if end of buffer reached). So, it does not make sense to say whether it is line-buffered or not - this just does not apply.

Also, while in user space stdout, stderr make sense, this is not the case in kernel and for printk(): it does not write to stdout because there is no such thing in kernel.

Granted, something takes care of actually delivering contents of this ring-buffer to the user - whether it is printing it on serial console or retrieving it with dmesg, and this typically looks for LF characters to separate lines.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top