「波動er度チェック」を作ってて、rewind( rfp ) とか fseek( rfp, 0, SEEK_SET )
とかやってもファイルポインタが動いてくれなくてびっくり。
これはバグなのか? それとも仕様で悪いのは俺なのか? 謎だったのです。
で、プログラムを弄っていて妙に思ったところを、 バグなのか仕様っぽいモノなのかはっきりさせてみようと。
もしバグであるようなら、修正されたときにはその旨追加します。
仕様のようでも、変更されたら新しい情報が書かれると思います。
例えば、/rom0/ に置いてある実行ファイルから、/rom0/ に置いてある test.dat を読みにいこうとするときに、fopen( fname, mode )でファイルを開くわけですが、
shell\fopen()の第1引数 | "/rom0/test.dat" | "test.dat" |
Meg(デフォルト) | 開ける | 開けない |
Ged(c.mosさん作) | 開ける | 開ける |
という感じになってます。フルパスで書けば問題ないんですが、 Gedでデバッグしてると全然気付かないんですわ……。
結論から言うと、おそらくバグです。rewind()はおそらく動いてません。
仕方ないので、同等のコードで代用します。
マニュアルにあるとおり、
fseek( fp, 0, SEEK_SET );
clearerr( fp );
と等価ですので、こっちを書きましょう。
なお、いつもPC上でコーディングしてる感覚で fseek() だけ呼んでやると、 エラーがクリアされないだけでなく、ファイルの読み書き位置も変わりません。 必ず clearerr() を呼んでやりましょう。
一応、バグ報告は出しておきました。