web-dev-qa-db-ja.com

/ devディレクトリにあるこれらのファイルは何ですか?

ほとんどのデバイスが/devディレクトリに表示されることは知っていますが、実際には2つの非常に奇妙でありながら馴染みのある名前がそこにあることに気づきました...

私はstdin@stdout@について話している:

enter image description here

これらは何のためですか? C言語の機能で使用されていますか?

6
jcora

これらのファイルは、実際にはstdinstdout、および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つのエントリが含まれています。各エントリはファイル記述子に対応し、ファイルへのシンボリックリンクです(可能な場合—パイプ、ソケット、および削除されたファイルの場合、シンボリックリンクはデバッグに役立つ情報を提供しますが、名前で開くことができるファイルを指しません) 。これらのファイル記述子は、openclosedupreadwriteなどのC関数で操作するものと同じです。 使用者 C関数。同じオブジェクトと対話する他の方法です。

/dev/stdinとその友人が存在する理由は、プログラムがファイル名を必要とすることがあるが、すでに開いているファイル(たとえば、パイプ)を使用するように指示したいからです。したがって、/dev/stdinを渡して、標準入力を読み取るようにプログラムに指示できます。

参考文献:

11
Gilles