ほとんどのデバイスが/dev
ディレクトリに表示されることは知っていますが、実際には2つの非常に奇妙でありながら馴染みのある名前がそこにあることに気づきました...
私はstdin@
とstdout@
について話している:
これらは何のためですか? C言語の機能で使用されていますか?
これらのファイルは、実際にはstdin
、stdout
、およびstderr
と呼ばれます。 @
文字はls
によって追加され、それらが シンボリックリンク であることを示します。 ls -l
は、これらのシンボリックリンクのターゲットが/proc/self/fd/0
、/proc/self/fd/1
、および/proc/self/fd/2
であることを明らかにします。
/proc
は、カーネルが提供する仮想ファイルシステムであり、オペレーティングシステムに関する情報を表示します。特に、ID 1234のプロセスに関する情報を含む/proc/1234
などのディレクトリがあります。/proc/self
は、アクセスしているプロセスのディレクトリへのシンボリックリンクです(カーネルは異なるプロセスに異なるターゲットを返します)。
/proc/self/fd
(/dev/fd
でもシンボリックリンクされています)には、プロセスが開いているファイルごとに1つのエントリが含まれています。各エントリはファイル記述子に対応し、ファイルへのシンボリックリンクです(可能な場合—パイプ、ソケット、および削除されたファイルの場合、シンボリックリンクはデバッグに役立つ情報を提供しますが、名前で開くことができるファイルを指しません) 。これらのファイル記述子は、open
、close
、dup
、read
、write
などのC関数で操作するものと同じです。 使用者 C関数。同じオブジェクトと対話する他の方法です。
/dev/stdin
とその友人が存在する理由は、プログラムがファイル名を必要とすることがあるが、すでに開いているファイル(たとえば、パイプ)を使用するように指示したいからです。したがって、/dev/stdin
を渡して、標準入力を読み取るようにプログラムに指示できます。
参考文献: