プロセスがこの特殊ファイルに書き込むときに何が起こるのかわかりません。すべてのバイトはどうなりますか? /dev/nullに書き込むのがCPUリソースを占有しないのはなぜですか? Linuxのソースコードを参考に答えていただければ幸いです。
Archフォーラムには次の答えがあります。
バッファは単に無視されます。
ただし、たとえばcat /dev/urandom> /dev/nullを実行すると、write_null関数を複数回または1回だけ呼び出す必要があり、バッファがどのように機能するかを理解できません。
答え1
Linuxでは、/dev/null
以下を含む多くの機能で実装されています。write_null
:
static ssize_t write_null(struct file *file, const char __user *buf,
size_t count, loff_t *ppos)
{
return count;
}
ご覧のとおり、バッファは完全に無視され、関数が行うことは書き込み要求されたバイト数を返すだけです。
この関数は複数回呼び出すことができ、各呼び出しにはわずかなコスト(カーネル呼び出しコスト)が発生します。走れば
cat /dev/zero > /dev/null
この費用は支配的かもしれません。cat
読み取るコンテンツが足りないか書き込めなくなるまで、入力(または指定されたファイル)から繰り返し読み込み、出力を書き込みます。/dev/urandom
しかし、読むとき読むのはもっと複雑です、私はこれが支配的であると期待しています。どちらの場合も、すべての「I / O」はCPUベースであり、cat
最終的にかなりの量のCPU(論理CPUの100%)を使用します。最終的にwrite_null
カーネル呼び出しはできるだけ早く行われますが、何もしません。できるだけ早く。
プログラムの情報出力を破棄するために使用されるなど、より一般的な場合は、書き込み回数がはるかに少なく、プログラムが/dev/null
実行する他の操作と比較して全体のコストは無視できます。
/dev/zero
(ところで、上にリンクされたコードのすぐ後ろの実装が示されています。)/dev/null