マルチスレッドで、同一ファイルをopen-write-close している状況で
片方がopenしてる時に片方でcloseしてしまった場合問題ないでしょうか?
あるプログラムでワトソン博士が出たのですが、どうも上記のような操作
をしているファイルでfcloseの中で例外エラーが出てるようなんですが
それ以上調べることができず困っています。
書き込みモードで、同時に2つのスレッドからopenしてる時点で
おかしいのでわ?
Writeでのファイルオープンは、排他ロックしましょうね。
(てか、open時にエラー出てませんか?)
>>をしているファイルでfcloseの中で例外エラーが出てるようなんですが
>>それ以上調べることができず困っています。
>(てか、open時にエラー出てませんか?)
原因はfopenでエラー(ポインタがNULL)なのにfcloseしてるからなんでしょうね。
#仮にエラーにならなかったとしてもファイルがまともに作成されるとは思えないけど。
ありがとうございます。
fopen ですが、エラーチェックはやっています。
fopenで過去記事を検索したのですが、fp = fopen( psPath,rb))で
マルチスレッドでopenできるという記事がありました。自分の場合は
rb+ なので同じかどうかはわかりませんが。
ちゃんと読んでます・・・??
>書き込みモードで、同時に2つのスレッドからopenしてる時点で
>おかしいのでわ?
rb+は、書き込みモードでしょ?
rbは? 読み込みモードですね?
回答は、
>書き込みモードで、同時に2つのスレッドからopenしてる時点で
>おかしいのでわ?
>Writeでのファイルオープンは、排他ロックしましょうね。
>(てか、open時にエラー出てませんか?)
となります。
せっかくのレスなんですから、理解できるまでちゃんと読んで
もらいたいものです。
>fopen ですが、エラーチェックはやっています。
本当に正しいエラーチェックができているか疑問です。
>rb+は、書き込みモードでしょ?
>rbは? 読み込みモードですね?
すいません、プログラムは修正します。どうもありがとうございます。
>本当に正しいエラーチェックができているか疑問です。
一応NULLでチェックししているのですが。
>一応NULLでチェックししているのですが。
NULLをはじいた先でfcloseってことはないですよね。
・・・大丈夫ですか?
では先の私の発言は無視してください。
失礼しました。
>>rb+は、書き込みモードでしょ?
>>rbは? 読み込みモードですね?
>すいません、プログラムは修正します。どうもありがとうございます。
どのように修正されるのかよくわからないのですが。。。
とにかく、同時に2つのスレッドから書き込みオープンするのは、
その時点で間違いです。まずその認識を持ちましょう。
これ以上は、具体的に何がやりたいのか、ソースはどうなっているのか
等がわからなければ、どうしようもないでしょう。きっと。
回答できるように質問を工夫してみてください。
現時点では「やったらイカンことをやったら、なんかエラーは
でるでしょ」という状況です。
今MSDNもっていないので確実でないのですが
fopenかfwriteの時にshared モードの指定があったはずです
間違ってもopenポインタの共有などはしていませんよね