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,stderrmake sense, this is not the case in kernel and forprintk(): it does not write tostdoutbecause 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.