1

Linux ファイル記述子の「値」は常に開いているファイルの制限よりも小さいですか?

理論的には、システムは閉じられたファイル記述子の ID 値を再利用します。そして、1つのプロセスで1021個のファイルを開いた後、デフォルトで0、1、2から1023までの範囲のファイル記述子の値を取得する必要があります。別のファイルを開きたい場合は、いくつかのファイル記述子を で解放する必要がありますclose。システムは、再度呼び出すときに、これらの解放された ID を再利用openします。したがって、この場合、ファイル記述子の最大整数値は 1023 になります。あれは正しいですか ?

ulimit -nsetrlimit、およびを使用して、開いているファイルの制限を変更できることを知っています/proc/sys/fs/file-maxcharで開いているファイルの制限を128に減らした場合、開いているソケットファイル記述子を変数で保存できるかどうかを知りたいだけですsetrlimit

4

1 に答える 1

3

はい、値は0からgetrlimit()によって返される現在の制限より1少ない範囲に制限されます。

getrlimit()のマニュアルページから:

   RLIMIT_NOFILE
          Specifies a value one greater than the maximum file descriptor number
          that can be opened by this process.  Attempts (open(2), pipe(2),
          dup(2), etc.)  to exceed this limit yield the error EMFILE.
          (Historically, this limit was named RLIMIT_OFILE on BSD.)

Open Group Base仕様から:

RLIMIT_NOFILE
これは、システムが新しく作成された記述子に割り当てることができる最大値よりも1大きい数値です。この制限を超えると、ファイル記述子を割り当てる関数は失敗し、errnoが[EMFILE]に設定されます。この制限により、プロセスが割り当てることができるファイル記述子の数が制限されます。

于 2012-09-25T15:01:56.653 に答える