![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.1ベストアンサー
- 回答日時:
お酒が入っているので、確認しません。
記憶だけで。「この流れをループで行っていると1万回を超えたあたりでopen()がNGになりますが、何故でしょう?」
munmap() していないので、メモリ空間が無くなったのではないでしょうか?mmap() のサイズが 4KB とすると 1000回やって 4GB ですから。メモリ空間(あるいは mmap() できるアドレス空間)が足りなくなっても不思議ではないですね。
「ちなみにループの中でclose()するのを忘れると1千回を超えたあたりでopen()がNGになるのは
#define FD_SETSIZE 1024
だからという予想で合っているでしょうか?」
ここはちょっと OS 依存ですが、Linux(Unix) だったらプロセスがオープンできるファイル数の上限が setrlimit() で設定できます。FD_SETSIZE は select(2) で使われる struct fdset における fd の上限というのが正しいハズ。勿論実装によっては FD_SETSIZE 以上にファイルをオープンできない、というのは十分に考えられます。
No.2
- 回答日時:
再度 No.1 です。
すいません、肝心な事を書き忘れました。普通(?)、mmap() したらファイルには書かないように思います。少なくととも私はそういうプログラムは書いた事がないし、見た事もないです。write() した内容がちゃんと反映されてますか?
よくあるのは、mmap() したメモリ領域に書き込んで、sync()(Linux なら msync() だったかな?fsync() というのもあったような)で、メモリの内容をファイルに反映させます。つまり、mmap() されているからといって、メモリに書いた内容はすぐさまファイルに反映はされないのです。逆に、ファイルの内容をmmap()されたメモリに強制的に反映させる術はないんじゃないかな。
mmap() された領域を書き換えると、いちいち lseek() しなくて済みますし、(sync()するまで)ファイルに書き込みにいきませんので(最近の OS ではファイルへの書き込みはメモリにキャッシュされますが、それでも)速い(ハズ)です。
この回答へのお礼
お礼日時:2007/10/27 05:16
質問内容とは違うことまでお心遣い頂き、ありがとうございます。
とりあえずwrite()でも書き込めているように見えるのですが、いくつか疑問点があるのでそれは別途質問出します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl perlのflock関数でロックをかけたままopen関数で何度もファイルを開きなおすことはできますか 3 2023/05/01 22:25
- PostgreSQL ポストグレにあるExcelファイルを開くには 1 2022/12/13 18:07
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
テキストファイルの最終行を削...
-
グローバル変数のよくない使い...
-
csvファイルを開かずに文字を検...
-
ドラッグアンドドロップでファ...
-
「VBScript」ADODB.Streamにお...
-
iniファイルに追記がしたいです。
-
SGファイルって何ですか?
-
フローチャート (ファイル併合...
-
String Table リソースを条件に...
-
ShellExecuteEx→WaitForSingleO...
-
VBに、Cのincludeのようなもの...
-
フリーソフトウェアでflaファイ...
-
大きいサイズのテキストファイ...
-
UNICODE文字が書き込めるWritep...
-
分割コンパイルの#defineについて
-
マスタとファイルの違いって?
-
ファイル名の先頭にアンダース...
-
ファイルダイアログでのファイ...
-
ファイル読み書き方法について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
バッチで118項目のCSVを処理し...
-
テキストファイルの最終行を削...
-
CSVファイルへの保存の際、デー...
-
SGファイルって何ですか?
-
大きいサイズのテキストファイ...
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
グローバル変数のよくない使い...
-
iniファイルに追記がしたいです。
-
Excelマクロでの再読込み方法
-
C言語のfopenについて教えてく...
-
ハッシュの計算時間について
-
VBAにてEXCEL以外のファイル(テ...
-
Javascript で INI の読み書き
-
同じ名前のファイルを作った場...
-
ASP .NETでファイル選択ダイア...
-
VBに、Cのincludeのようなもの...
おすすめ情報