unix / linuxはすべての無料のファイル記述子のリストを保持しますか?

unix / linuxはすべての無料のファイル記述子のリストを保持しますか?

私はRobert Loveの「Linux Systemsプログラミング」を読んで、ファイル記述子の概念を理解しようとしています。

彼が言及した

ファイル記述子は0から始まり、この最大値より小さい1まで上がります。デフォルトでは、最大値は1,024です。

たとえば、ファイル記述子500と501をそれぞれ使用して2つのファイルを開きます。

これで、ファイル記述子が500のファイルが閉じられると、次に割り当てられるfdが502になるという意味ですか? 500個再利用可能ですか?もしそうなら、カーネルは閉じたすべてのファイル記述子をどのように保持しますか?

答え1

Linux は、Unix ファミリシステムと同様に、カーネルが管理するファイルアロケータテーブルを使用します。 open はディスクリプタを生成し、最下位の閉じたファイルディスクリプタを再利用するか、新しいエントリを作成します。 close テーブルで閉じる項目を設定します。

答え2

これLinuxのマニュアルページopen(2)指摘

成功した呼び出しによって返されたファイル記述子は、現在プロセスに対して開かれていない最も低い番号のファイル記述子になります。

したがって、500と501だけを開くと、次に得られるのはゼロです。通常、合理的なものを指す0(stdin)、1(stdout)、2()がある場合、またはデーモンの場合はもちろんです。stderr/dev/null

関連情報