ファイル記述子とファイル名

ファイル記述子とファイル名

ファイル記述子とファイル名の違いと関係が何であるかを知りたいです。すべてファイルにアクセスするために使用されますか?それでは、同じ方法ですか?

たとえば、、、/dev/fd/0および/dev/stdin/proc/self/fd/0すべてへのリンクです/dev/pts/2。これら4つのファイル記述子またはファイル名は何ですか?

答え1

/dev/fd/0, /dev/stdin, /proc/self/fd/04 つとも/dev/pts/2ファイル名です。/////dev/../dev/fd//0、、なども同様です/bin/sh。最後の例を除くすべては、コンピュータ上の既存のファイルの名前です。ファイル名は、Linux上のファイルシステムのファイルを指定する文字列です。ヌルバイトを含まず、最大4096バイトの長さの文字列は有効なファイル名です。これらの名前の多くは、(既存のディレクトリを仮定)などと同じです。これまでに示したすべての例は絶対ファイル名です。 aで始まらず、意味が現在のディレクトリに依存する相対ファイル名もあります。/etc/fstab/fioejfoeijf/bin/sh///bin/sh/bin/../bin/sh/bin/

ファイル名に関する用語は普遍的ではありません。 「ファイル名」は、ファイルのフルパスを意味する場合もあり、ディレクトリエントリの名前を意味する場合もあります。 POSIX 用語は「ファイル名「または」パス名コンポーネント"をディレクトリエントリの名前、"パス名”フルパスを取得するには。

ファイル記述子は以下を指定します。開いている特定のプロセスのファイル。カーネルは、各プロセスのファイル記述子テーブルを維持します。ファイル記述子テーブルの各エントリは、プロセスがファイル記述子の読み取り、書き込み、およびその他の操作を要求した場合に実行する操作を表します。

ファイル記述子はファイルに対応し、関連する名前を持つことができますが、すべてのファイル記述子はそうではありません。その場合、ファイルは通常のファイル、ディレクトリ、デバイスファイル、または名前付きパイプ(FIFOとも呼ばれる)(作られた種類mkfifo) 一部のシステムでは、Unixソケットなど、より多くの可能性があります。ドア。関連する名前付きファイルがないファイル記述子の例は次のとおりです。管路(この種のpipeシステムコール)とネットワークソケット

/dev/fd/0/dev/stdinそして/proc/self/fd/0特別な意味を持つファイル名(すべて同等):すべてファイルディスクリプタ0を介して現在アクセスされているファイルを指定します。プロセスがこれらのファイルを開くと、カーネルはファイル記述子テーブルのインデックス0のエントリを新しい記述子にコピーします。これらのファイルを開くことは、次を呼び出すのと同じです。dup(0)。名前付きファイルは、新しいファイルを開くのではなく、すでに開いているファイルを使用するようにプロセスに指示する間接的な方法です。これは、開こうとしているファイル名を必要とするプログラムのコマンドラインを渡すのに最も便利です。

答え2

ファイル名はファイルシステム内のファイルの名前にすぎず、それ以上ではありません。ただ文字列です。

ファイル記述子は、読み書き可能な一種のオブジェクトです。開いて準備されたファイルです。ファイル記述子だけがあるわけではありません。 stdin、stdout、stderrも記述子であり、ファイルとまったく同じ機能を使用してファイル記述子に書き込んで読み取ることができます(検索を実行できないことを除く)。ファイル以外の記述子の他の例には、名前付きパイプとネットワークソケットがあります。

コード内のファイル記述子は、ファイルオブジェクトを表すカーネルの何かへのポインタである変数です。

たとえば、/dev/fd/0、/dev/stdin、/proc/self/fd/0 はすべて /dev/pts/2 へのリンクです。これら4つのファイル記述子またはファイル名は何ですか?

これは特定のスクリプトやプログラムに役立つ疑似ファイルです。ファイルを開くことができ、open()はファイル記述子を返します。

関連情報