/dev/nullがファイルであるのはなぜですか?単純なプログラムでは、なぜその機能が実装されないのですか?

/dev/nullがファイルであるのはなぜですか?単純なプログラムでは、なぜその機能が実装されないのですか?

Linuxでは特殊ファイルの概念を理解しようとしています。しかし、/dev私が知っている限り、Cは数行で機能を実装できますが、特別なファイルを持つことは愚かなようです。

また、ほぼ同じ方法で使用できます。つまり、nullリダイレクトする代わりにパイプ/dev/nullとしてファイルとして保存する特別な理由はありますか?ファイルとして保存すると、同じファイルにアクセスするプログラムが多すぎるなど、他の多くの問題は発生しませんか?

ベストアンサー1

キャラクター別装置を使用することで得られる性能上の利点に加えて、最大の利点はモジュラー。 /dev/null は、シェルパイプだけでなく、ファイルが予想されるほとんどすべてのコンテキストで使用できます。ファイルをコマンドライン引数として受け入れるプログラムを考えてみましょう。

# We don't care about log output.
$ frobify --log-file=/dev/null

# We are not interested in the compiled binary, just seeing if there are errors.
$ gcc foo.c -o /dev/null  || echo "foo.c does not compile!".

# Easy way to force an empty list of exceptions.
$ start_firewall --exception_list=/dev/null

このような場合、プログラムをソースまたはシンクとして使用するのは非常に面倒です。シェルパイプの場合でも、stdoutとstderrは独立してファイルにリダイレクトすることができ、実行可能ファイルをシンクとして使用するのは困難です。

# Suppress errors, but print output.
$ grep foo * 2>/dev/null

おすすめ記事