
C言語のfopenで同時に開けるファイル数の上限を変える方法を教えてください。
3000個程度を超えると開けなくなりました。(戻り値がNULL)
自分としては512や2048以上のファイルを開けたことが不思議だったのですが・・・
以下にOSのバージョンなどを書きます
また、fopenで開けるファイル数の上限はどのようにして見ることができますか。(書かれている変数がありますか?
あともうひとつ、
100万程度の大量のファイルを同時に開ける言語はありますか。
(OSの限度などは抜きにして。)
よろしくお願いします。
----
OSはDebian 4.0
コンパイラはgcc 4.1.2
/proc/sys/fs/file-max
による上限は数十万でした。
No.3ベストアンサー
- 回答日時:
>質問の仕方で誤解を与えてしまったようですが、
>最大数が知りたいのです。
「処理系に依存するので不明」が答え。
ある処理系ではfopenが返すFILEポインタの実体が
FILE __iob[FOPEN_MAX];
と定義されてて「どう足掻いても同時にはFOPEN_MAX個しか開けない」って制限があったりする(つまり、配列がFOPEN_MAX個しか無いから、配列の全要素を使い切ったら終り)
ある処理系では、動的にFILEポインタを確保するので、ヒープメモリの上限に達するか、OSのリソースが尽きるまで同時にfopen出来る、と言う仕様になっていたりする。
で、OSにも「1つのプロセスで同時に開けるファイルの上限」があったり無かったりするので、Cのfopenライブラリの上限ではなく、OSの上限に引っ掛かったりもする。
そういう訳で「確実に同時オープン出来る事が保証されている最低の個数としてFOPEN_MAXが定義されている」だけで「本当に同時オープン出来るファイル数の上限は不明」としか言えない。
>あともうひとつ、
>100万程度の大量のファイルを同時に開ける言語はありますか。
>(OSの限度などは抜きにして。)
「OSの限度を抜きにする」と、質問自体が無意味になる。
なぜなら「ライブラリ関数で決められた上限に依存せずに大量のファイルを同時オープンするには、ライブラリ関数を使わず、直接、OSのファイルオープンを行う」と言う方法を取らざるを得ない。
そして、この方法は「直接OSのファイルオープンを行うのなら、言語に依存しない。その言語で、直接OSのファイルオープンを行う方法が用意されてさえ居れば良く、どの言語でも共通の話。依存するのはOSそのものの上限だけ」と言う事になる。
つまり「上限無しの方法を使うと、必然的に、OSそのものの上限に依存する」と言う事。
これは、質問者さんが提示した「OSの限度などは抜きにして」と言う前提に反する。
つまり「OSの限度などは抜きにして、と前提した事そのものが間違い」なのである。
OSの上限を抜きにして語れない話は、OSの上限は抜きにはできない。
そして、結論は「質問自体が無意味」となる。
唯一「OSの上限にさえ依存しない方法」として「記憶媒体に対し、OSを介さずに、直接アクセスする」と言う方法もあるが、それをやるには「OSのファイルシステムがやっている事と同一の事をすべて自前でやる事になる」ので非現実的。なのでこの方法は「無視」して「無かったこと」にする。
No.1
- 回答日時:
stdio.h を #include しておけば, 同時にオープンできるファイル数 (もともとオープンされている 3つの標準ストリームを含む) は
FOPEN_MAX
でわかります.
でも, そんなに大量のファイルを「同時にオープンする」必要ありますか? プログラムの作りがおかしいような気もします.
この回答への補足
回答ありがとうございます。
FOPEN_MAXは同時に開けるファイルの最大数ではなくて
同時に開けることが保障されている最少のファイル数だったと記憶しています。
質問の仕方で誤解を与えてしまったようですが、
最大数が知りたいのです。
ちなみに私の環境の場合FOPEN_MAXは20でした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 7 Media Playerが開かない。ファイルアイコンを右クリックしても「プロパティ」が表示されない。 2 2023/02/05 14:45
- その他(ソフトウェア) Emacsメニューの日本語化について 1 2023/06/16 15:52
- その他(メールソフト・メールサービス) Thunderbird Wordの添付ファイルが開けない 1 2023/06/22 11:20
- Windows 10 explorerをedgeで開く方法 2 2022/06/05 14:59
- デスクトップパソコン Outlookのデータが勝手に復元された理由は? 1 2022/07/13 15:45
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Excel(エクセル) ドキュメントに保存していたエクセルのファイルが開きません。 2 2022/12/02 09:38
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- Visual Basic(VBA) 複数ブックの統合について Excel VBA 1 2022/05/13 09:48
- HTML・CSS CSSファイルの日本語コメントが文字化けしてしまう 3 2022/12/26 15:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETによるプロセス間通信
-
Access2010の最適化設定について
-
設定ファイルのAPI
-
flashMXでキャッシュの状態によ...
-
画像解析
-
VB6(windowsXP)でTextBoxのプロ...
-
FILEポインタ配列の動的生成
-
OpenCVでのavi動画ファイルの指定
-
動画処理のライブラリについて
-
2つのCSVファイルの比較
-
VB.netでTIFFファイルの読み込...
-
クリップボードから任意のファ...
-
ヘッダファイルの基本から作り方
-
2つのファイルを比較するC言語...
-
バッチファイルでD&Dしたファイ...
-
アドレス帳WABファイルをサンダ...
-
C言語関数違いについて。
-
【C#】リソースファイルの埋め...
-
C言語のfopenについて教えてく...
-
Excelマクロでの再読込み方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
dataファイルをxtxファイルにす...
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
CSVファイルへの保存の際、デー...
-
グローバル変数のよくない使い...
-
バッチで118項目のCSVを処理し...
-
テキストファイルの最終行を削...
-
VBAにてEXCEL以外のファイル(テ...
-
VBに、Cのincludeのようなもの...
-
分割コンパイルの#defineについて
-
RPGでファイル名(もしくはレコ...
-
SGファイルって何ですか?
-
マウスポインタの変更
-
Excelマクロでの再読込み方法
-
【C#】リソースファイルの埋め...
-
ダイアログボックスで複数フォ...
-
C言語のfopenについて教えてく...
-
ドラッグアンドドロップでファ...
-
「VBScript」ADODB.Streamにお...
おすすめ情報