About WonderWitch 今回のお題:
『不具合 ? 仕様 ?』


●概要

「波動er度チェック」を作ってて、rewind( rfp ) とか fseek( rfp, 0, SEEK_SET ) とかやってもファイルポインタが動いてくれなくてびっくり。
これはバグなのか? それとも仕様で悪いのは俺なのか? 謎だったのです。

で、プログラムを弄っていて妙に思ったところを、 バグなのか仕様っぽいモノなのかはっきりさせてみようと。

もしバグであるようなら、修正されたときにはその旨追加します。
仕様のようでも、変更されたら新しい情報が書かれると思います。

●内容

shell とファイルの相対パスとの関係

例えば、/rom0/ に置いてある実行ファイルから、/rom0/ に置いてある test.dat を読みにいこうとするときに、fopen( fname, mode )でファイルを開くわけですが、

shell\fopen()の第1引数 "/rom0/test.dat" "test.dat"
Meg(デフォルト)開ける開けない
Ged(c.mosさん作)開ける開ける

という感じになってます。フルパスで書けば問題ないんですが、 Gedでデバッグしてると全然気付かないんですわ……。

rewind()、fseek() がうまく動かない

2000/11/22 訂正: rewind()のバグが修正されました。fseek() の変更は無いようでが、今のままでも特に問題はないでしょう。

結論から言うと、おそらくバグです。rewind()はおそらく動いてません。 仕方ないので、同等のコードで代用します。
マニュアルにあるとおり、

fseek( fp, 0, SEEK_SET );
clearerr( fp );

と等価ですので、こっちを書きましょう。

なお、いつもPC上でコーディングしてる感覚で fseek() だけ呼んでやると、 エラーがクリアされないだけでなく、ファイルの読み書き位置も変わりません。 必ず clearerr() を呼んでやりましょう。

一応、バグ報告は出しておきました。


戻る