3

Linuxアプリケーションレベルでは、すべてのprintfメッセージはに移動しstdout、すべてのerrメッセージはに移動しますstderr。どこ

stderrは通常、バッファリングされておらず、

stdoutはラインバッファリングされます

それで、マクロを指定するそのような他のレベルの 有無にかかわらずkernel space使用するとき、このメッセージはどのようにバッファリングされますか?printk()KERN_ERR

dmesg別のメカニズムはありますか?

4

1 に答える 1

8

これprintk()は、メモリ内のリングバッファにさらに数バイトを追加するだけです(バッファの終わりに達した場合はラップアラウンドします)。したがって、それがラインバッファリングされているかどうかを言うのは意味がありません-これは単に当てはまりません。

また、ユーザースペースstdoutではstderr、理にかなっていますが、これはカーネルには当てはまりません。カーネルにはそのようなものがないため、printk()書き込みは行われません。stdout

確かに、シリアルコンソールで印刷する場合でも、で取得する場合でも、このリングバッファのコンテンツを実際にユーザーに配信する処理が行われdmesg、通常、行を区切るLF文字が検索されます。

于 2012-11-24T06:00:10.623 に答える