Linuxアプリケーションレベルでは、すべてのprintfメッセージはに移動しstdout
、すべてのerrメッセージはに移動しますstderr
。どこ
stderrは通常、バッファリングされておらず、
stdoutはラインバッファリングされます
それで、マクロを指定するそのような他のレベルの 有無にかかわらずkernel space
使用するとき、このメッセージはどのようにバッファリングされますか?printk()
KERN_ERR
dmesg
別のメカニズムはありますか?
Linuxアプリケーションレベルでは、すべてのprintfメッセージはに移動しstdout
、すべてのerrメッセージはに移動しますstderr
。どこ
stderrは通常、バッファリングされておらず、
stdoutはラインバッファリングされます
それで、マクロを指定するそのような他のレベルの 有無にかかわらずkernel space
使用するとき、このメッセージはどのようにバッファリングされますか?printk()
KERN_ERR
dmesg
別のメカニズムはありますか?
これprintk()
は、メモリ内のリングバッファにさらに数バイトを追加するだけです(バッファの終わりに達した場合はラップアラウンドします)。したがって、それがラインバッファリングされているかどうかを言うのは意味がありません-これは単に当てはまりません。
また、ユーザースペースstdout
ではstderr
、理にかなっていますが、これはカーネルには当てはまりません。カーネルにはそのようなものがないため、printk()
書き込みは行われません。stdout
確かに、シリアルコンソールで印刷する場合でも、で取得する場合でも、このリングバッファのコンテンツを実際にユーザーに配信する処理が行われdmesg
、通常、行を区切るLF文字が検索されます。