GNU/Linux >> Linux の 問題 >  >> Linux

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

Linux上の特殊ファイルの概念を理解しようとしています。ただし、/devに特別なファイルがある 私の知る限り、Cの数行でその関数を実装できるとしたら、ばかげているように思えます。

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

承認された回答:

キャラクター専用デバイスを使用することによるパフォーマンス上の利点に加えて、主な利点はモジュール性です。 。 / 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

Linux
  1. Linux の /dev/zero および /dev/null ファイルとは

  2. 別のshファイルからshファイルを実行する方法

  3. /dev/shm/ と /tmp/ はいつ使用する必要がありますか?

  1. ファイルによって表される疑似デバイスであるにもかかわらず、/dev/null に移動できるのはなぜですか?

  2. /dev/zero から /dev/null への DD ...実際に何が起こるか

  3. echo または print /dev/stdin /dev/stdout /dev/stderr

  1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  2. / dev/randomと/dev/ urandomをいつ使用するか?

  3. /dev/null に書き込む仮想ブロック デバイスを作成します。