人に聞けない痔の悩み、これでスッキリ >>

gcc3.2.3のofstreamでfopen64("file", "w")のようなことはできるのでしょうか?

A 回答 (1件)

えと.... fopen64 って何をする関数でしたっけ? なんとなく OS にも依存しそうな雰囲気があるんですが....

    • good
    • 0

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q4Gバイトのファイルを開くには?

C初心者です。
稼動環境はUNIX(AIX)です。
4Gバイトのテキスト・ファイルを処理しなければならないのですが、fopen()を使用すると、エラーが出て開くことができません。
動的にメモリを割り当てればよいのかな?と思いますが具体的な方法がわかりません。
どなたか教えていただけますか?

Aベストアンサー

こっちのほうがいいですね。
AIX 4.3のドキュメントが元ネタになっているようです。
http://www.llnl.gov/asci/platforms/bluepac/large_file_prog.html

参考URL:http://www.llnl.gov/asci/platforms/bluepac/large_file_prog.html

Qfopenできる上限の変更

C言語のfopenで同時に開けるファイル数の上限を変える方法を教えてください。
3000個程度を超えると開けなくなりました。(戻り値がNULL)
自分としては512や2048以上のファイルを開けたことが不思議だったのですが・・・

以下にOSのバージョンなどを書きます

また、fopenで開けるファイル数の上限はどのようにして見ることができますか。(書かれている変数がありますか?

あともうひとつ、
100万程度の大量のファイルを同時に開ける言語はありますか。
(OSの限度などは抜きにして。)

よろしくお願いします。

----
OSはDebian 4.0
コンパイラはgcc 4.1.2
/proc/sys/fs/file-max
による上限は数十万でした。

Aベストアンサー

>質問の仕方で誤解を与えてしまったようですが、
>最大数が知りたいのです。

「処理系に依存するので不明」が答え。

ある処理系では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のファイルシステムがやっている事と同一の事をすべて自前でやる事になる」ので非現実的。なのでこの方法は「無視」して「無かったこと」にする。

>質問の仕方で誤解を与えてしまったようですが、
>最大数が知りたいのです。

「処理系に依存するので不明」が答え。

ある処理系ではfopenが返すFILEポインタの実体が
FILE __iob[FOPEN_MAX];
と定義されてて「どう足掻いても同時にはFOPEN_MAX個しか開けない」って制限があったりする(つまり、配列がFOPEN_MAX個しか無いから、配列の全要素を使い切ったら終り)

ある処理系では、動的にFILEポインタを確保するので、ヒープメモリの上限に達するか、OSのリソースが尽きるまで同時にfopen出来る、...続きを読む

Qfopne で失敗する原因

fopenで失敗する原因とはなんですか?

Aベストアンサー

#1の方の回答に加えて...

・ファイル名の文字列がでたらめ(存在するかどうか以前の問題)
・指定したファイル名が実はディレクトリだった。
・ファイル名に空ポインタまたは不正なポインタを渡した。
・オープンモードに空ポインタまたは不正なポインタを渡した。
・オープンモードの形式が不正
・メモリ不足でバッファ(実装によってはファイル記述子も)の割り付けに失敗した。
・同名の関数またはマクロをユーザーが定義した。
・関数原型なしで呼び出した。
・他のスレッド等で、同じファイルに対する操作中(再入可能とは限らないので)


人気Q&Aランキング

おすすめ情報