Cente FileSystem

アンマウント中にfclose()を実行するとファイルクローズができなくなる問題について


発行番号: Cente101-0124
Rev: 第1版
発行日: 2024/9/2

【題名】
アンマウント中にfclose()を実行するとファイルクローズができなくなる問題について

【適用製品】
Cente FileSystem Ver6.11 ~ Ver6.50

【影響API】
fclose

【現象】
ファイルオープン中にメディアをアンマウントしfclose()を実行すると、エラーになり
ファイルをクローズすることができません。
その後、再マウントしても、対象のファイルを削除しようとするとCT_OPENDエラーが発生し、
またfclose()を繰り返し実行してもファイルをクローズすることが出来ない状態になります。

《発生条件について》
以下の順番で処理を実行した場合に発生します
①ファイルをオープン(モードは問いません)
②ファイルクローズせずにアンマウントを実行
③fclose()を実行

【原因】
fclose()ではエラーが起きた場合、ファイル構造体のメンバ”stat”と”name”をクリアします。
“stat”はファイルオープン状態のステータス(主にファイルポインタを引数として渡す関数で使用します)
“name”はファイル名(主にファイルポインタを引数として渡さない関数で使用します)
抜去中にfclose()を実行した場合、本来ファイル構造体のメンバの”stat”と”name”をクリアする必要がありますが、
抜去中は”stat”のみクリアを行っておりました。
それにより、”name”を確認するremove()やmove()を実行するとCT_OPENDエラーが
発生し、”stat”を確認するfclose()を実行した場合、CT_NOT_OPENエラーが発生します。

【回避方法】
reset_fsys()の実行後、FileSystemの初期化シーケンスを実行することにより解消されます。

■プログラムによる回避方法
修正ソースにつきましては、弊社サポートまでお問い合わせ下さい。