ファイル共有でfopenで失敗する – プログラミング – Home

ファイル共有でfopenで失敗する
 
通知
すべてクリア

ファイル共有でfopenで失敗する


QQQ
 QQQ
(@QQQ)
ゲスト
結合: 21年前
投稿: 10
Topic starter  

お世話になります。

共有ファイルの参照で困っております。

WindowsXP-64ビットの共有フォルダを
Windows7-64ビットから
accsesでファイルがあることを確認し
fopenで開くと、あるところ周辺で必ず、
EMFILE_Too many open files もしくは、EINVAL_Invalid argumentが
発生します。
開くファイルは数百個あり、連続して読み込んでいくのですが、
いつも同じファイルではなく、微妙に発生するファイル名は違います。
ファイルは開いて、読み終わったら、閉じてを1ファイルごとに行っており、
多くファイルを開いていることはありません。
失敗したときにSleep(1000)を入れ、タイミングずらすことで
4,5回リトライし、回避できます。
また、
Windows7-64ビット⇒WindowsXP-64ビットでは現象が発生するのですが
WindowsXP-64ビット⇒WindowsXP-64ビット、
WindowsXP-64ビット⇒Windows7-64ビット、
Windows7-64ビット⇒Windows7-64ビットでは現象は出ません。
windows7への移行で、現象が露呈しました。

開発環境は windows7-64ビットでvc2008です。

プログラム的に悪いのか、共有設定などが悪いのか
一切わかっておりません。
すみませんがアドバイスお願いします。


引用解決済
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

あんまり詳しくありませんが、FD(ファイルディスクリプタ)には上限があります。
条件によってはファイルを閉じても、どこかでキャッシュされているのかもしれませ
ん。
以下に似たような症状の報告がありました。

http://stackoverflow.com/questions/3184345/fopen-problem-too-many-open-files

他にも類似する報告も散見されますが、解決に至ったものはおおむね

1.C run-timeを使うな。Win32SDKないしMFCを使用せよ。

という方法によるもののようです。
以下のページでは _setmaxstdio へのリンクがありました。

http://newsgroups.derkeiler.com/Archive/Comp/comp.lang.ruby/2008-
01/msg03087.html

C run-timeでのFDの数を拡張できるようです。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

うーーん、
仲澤さんの意見通りWIN32SDKまたはMFCを使うべきだと思います。
 そもそも、fopenはMS-DOSとの互換性のためにある関数なので動作の保証がないと
思います。

あと、
 >開くファイルは数百個あり、連続して読み込んでいくのですが、
数百個も連続して読み込むのは無理があると思います。
いくら上限がないにしても、20個ぐらいで区切って読み込むのがいいと思います。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

追記、
> そもそも、fopenはMS-DOSとの互換性のためにある関数なので動作の保証がないと
> 思います。
CRT関数も大分改良されているみたいですね。


返信引用
QQQ
 QQQ
(@QQQ)
ゲスト
結合: 21年前
投稿: 10
Topic starter  

回答ありがとうございます。
ファイルの数が多いのは 重々承知しております。
苦しいところです。
fopenの件も、今後変更していこうと思います。

一応、対応策見つかったので 報告しておきます。

XPのパソコンで、「非ページプール割り当ての制限に達したため、サーバーはシステムの
非ページプールから割り当てることができませんでした。」なるエラーを出しているのを
発見し、少し調べて、てさぐりで
レジストリの
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanmanserver\Parameters
のSizeを3にすることで、不具合が発生しないのを確認できました。

本来の解決方法ではないような気がしますが…
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました