dポイントプレゼントキャンペーン実施中!

こんにちわ。
Linuxのファイルハンドルおよびファイルディスクリプタについて質問があります。
/proc/sys/fs/file-nrにはファイルハンドルに関する3つの値があるかと思います
が、それとは別にulimit -aを実行したときに表示されるopen filesの値があるか
と思います。

後者のulimitで表示されるopen filesの値はファイルディスクリプタの最大値だと
理解しておりますが、これと上記/proc/sys/fs/file-nr、/proc/sys/fs/file-max
で表示されるファイルハンドルの最大数との関連性がわからなくなって来ました。
ファイルハンドルはファイルを開く際にメモリ上に確保されるエリア、
ファイルディスクリプタはオープンしたファイルに割り当てられた
識別子という理解は間違ってるのでしょうか?
そもそもulimitはユーザの制限なので/proc/sys/fs/file-maxで設定
されている以上の値(ファイル管理テーブルの最大エントリ数)をopen filesには指定
できないという理解でいいでしょうか?

A 回答 (1件)

>ファイルハンドルはファイルを開く際にメモリ上に確保されるエリア、


>ファイルディスクリプタはオープンしたファイルに割り当てられた識別子という理解は間違ってるのでしょうか?
厳密な定義は知りませんが上記の理解であっていると思います。
ただし、ファイルハンドルと言う言葉はファイルをオープンするとOS内に確保されるエリアという意味以外に、オープンされたファイルを言語で扱う場合のオブジェクトという意味で使われることも多いです。

/proc/sys/fs/file-{max,nr} での数値はOS全体のもの。
ulimitで制限するのはそのシェルから起動する1つのプロセスでの上限です。
ulimitの上限で先に効いてくるのはシステム全体の値file-maxよりも、selectシステムコールで使うファイルディスクリプタビット列の長さ__FD_SETSIZE(普通は1024)でしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!