68user's page 掲示板

Prev< No. 4103〜4104> Next  [最新発言に戻る] [過去ログ一覧]
No. 4103 # 高嶋屋 2005/02/21 (月) 11:03:35
はじめまして、高島屋です。
solarisでC言語にてアプリケーションを作成する際の、1プロセスが可能なファイルオープンのMAX値について教えていただけないでしょうか?
実際にopen可能な、、と言う意味ではなく、「メーカで保障されている」MAX値を調査しています。
利用しているコンパイラは「SunOneStudio8」。
まず、当方で調査した結果を報告致します。

・ANSI規格の規格では8以上とされている。(「新ANSIC言語辞典」技術評論社→コンパイラに対して8以上を保障しなさいと言う意味だと思います)
    ただし、/usr/include/isostdio_iso.hでは、FOPEN_MAX=20と設定されている。(CPU=SPARK)
・solris
limit,sysdefコマンドで確認した所、
limitコマンドでのファイル記述子の最大数は256。
sysdefコマンドのfile descriptorsに関する、"process Resource Limit"の値も共に256。
実際に1プロセスで256ファイル以上をオープンすると、それ以降のファイルオープンが失敗しました。

・その他 システム全体で同時open可能なファイルの最大数があるのかは不明(調査不足)
なお、sysdefコマンドで確認した所、maximum number of process = 30000
maximum processes per user id = 29995の制限値が設定されていました。

ただ、上記はあくまで、実際に設定されている値で、それぞれのメーカーが保障している値ではありません。
SunOneのマニュアルからも最大値の記述は読み取れませんでした。(調査不足?)

Q1.FOPEN_MAXの20と言うのは何に利用されているかご存知ですか?CPUにより異なる様なのですが。。
プロセスを最大数立ち上げた際にオープン出来るファイルの最大数と言う事なのしょうか?


Q2.コンパイラごとに異なるものなのでしょうか?OSやCで決まるものなのでしょうか?
何を基準に(c?solaris?コンパイラ?)マックス値を調査すればよいのでしょう?

Q3.漠然とした質問で申し訳無いのですが、上記の様なファイルオープン数のメーカーからの保障について、どなたかご存知ですか?
    
以上、拙文で申し訳ないのですが、ご存知の方ご教授下さい。

No. 4104 # 68user 2005/02/21 (月) 23:44:19
質問は受け付けないって書いてあるのに、変わった人たちですね。
まぁいいですけど。

> Q1.FOPEN_MAXの20と言うのは何に利用されているかご存知ですか?
Solaris8 の stdio(3) には以下のように記述されています。
      The integer constant FOPEN_MAX specifies the minimum number
      of files that the implementation guarantees can be open
      simultaneously.

JIS X 3010 (C99 相当) には以下のように記述されています。
      FOPEN_MAX は、同時にオープンできることを処理系が保証するファイル
      数の最小値をあらわす整数定数式に展開する。

なお、FOPEN_MAX は最大値ではなく最小値です。「少なくともこれだけは
オープンできる」という値です。


FOPEN_MAX が具体的にどう使われているか、という話であれば、処理系
依存です。たとえば FreeBSD であれば libc において
      static FILE usual[FOPEN_MAX - 3];
などと使われており、リソースを確保しなおすことなくオープンできる
ファイル数が FOPEN_MAX である、という形になっているようです。

Linux などで使われている glibc においては FOPEN_MAX を一切使用して
おらず、意味のない値になっています。Solaris はソースを持ってないので
知りません。

> Q2.コンパイラごとに異なるものなのでしょうか?OSやCで決まる
> ものなのでしょうか?
何がですか? FOPEN_MAX が?

> Q3.漠然とした質問で申し訳無いのですが、上記の様なファイルオープン数の
> メーカーからの保障について、どなたかご存知ですか?
「保証する値」にこだわるのであれば、メーカーに問い合わせるのが
一番かと思います。

Prev< No. 4103〜4104> Next  [最新発言に戻る] [過去ログ一覧]