[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 3788] BOARD: Re: スクリプトのファイル書き込み他



このメールは、OSASK伝言板に書き込まれた内容です。
この書き込みに返事を書く場合は、下のURLから書き込みを行なって下さい
http://www.imasy.org/~mone/osask/index.cgi?REFER=3d02118c_d2d9

2002/06/08 23:15
川合秀実

[OSASK 3785]へのレスです。

>> 今日編集中 3,4度、編集中に原因不明のバグに見まわれました。
>> Scriptでモジュール読みこみどうたら
>それは宜しくないです。
>ファイル書き込み関係でしょうか。
>モジュール読み込み何某が出ると続けて読み込み不能に陥ると思います。

  編集中とあるので、teditc側の問題なのかもしれません。それとも↓↑などを
入力して確定させることなくScriptに読ませてしまったなどの人為的なミスなん
でしょうか?

>機能限定ですが fopen, fclose, fread, fwrite 辺りを用意して使ってます。
>モジュールのマップは 4096byte づつです。
>書き込みモードで fopen されたときは、まず 4096byte にリサイズします。
>書き込み領域が足りなくなると 4096byte づつサイズを増やします。
>最後に fclose か fflush された時点でファイルサイズを合わせます。

  なるほど。サイズについては、増やしすぎて戻る、といった感じなのですね。

  提案としては2つあります。一つは、既存ファイルに対しては、足りなくなる
までリサイズしないというものです。もちろん、fflushされたら余っていた分を
返しますが。そして増やす場合もメモリ上で4KB単位のバッファリングをして、
バッファがいっぱいになったら書き出すようにします。これはできるだけ余分な
サイズを要求しないようにするためです。

  もう一つの提案は、fopen時に予定サイズを申告できるようにすることです。
まあこの時点で引数の数がfopenとは違うのでfopenwなどとした方がいいでしょ
う。fopenwはOSASK以外のプログラムでは指定されたサイズを無視して単にfopen
するだけです。しかしOSASK用アプリでは、指定されたサイズへの変更をも試み
て失敗したらNULLを返すようにします。この関数を使ってアクセスする場合でも
事前にサイズが分からないような場合は予定サイズを0にすればいいでしょう。
それでも先のアルゴリズムによって最後はちゃんと目的のサイズになるはずです
。

  ただOSASKファイルシステムの理念からすると、そういう面倒なバッファリン
グを不要にするために簡単なメモリマップトファイルを採用したので、それをfo
pen, fwriteに還元してアクセスしなけばいけないというのは、ちょっともった
いないというか、残念ではあります。Gakuさんのお気に召さなかったようなので
しょうがないですが。・・・理想としては、fopenやfwriteをもっと抽象化した
ファンクションを作ってそのファンクションがfopenやfwrite、もしくはOSASKの
メモリマップトアクセスでファイルを読み書きする、という方法で互換性を確保
してもらえると非常に嬉しいです。

  もちろん将来でも1GBを超えるようなファイルをいくつも扱うといった場合は
、OSASKのメモリマップトアクセスで簡単に読み書きすることはできないでしょ
う。アドレス空間からはがしたり貼り付け直したりしなければいけません。そう
いう場合は今回Gakuさんが作ったようなシステムが不可欠になるかもしれません
。でもそういうケースはあまり多くはないと思います。重装備で何でもできるバ
ージョンは確かに重要ですし心強いですが、軽装備で手軽なものがないというの
は僕にはさみしいです。いかがでしょうか?

>ところで、[OSASK 3779] のその2の操作ですが
>32x32 のビットマップに対しては期待通りの動作に見えます。
>最初のリサイズが失敗したので書き込み操作をしなかったのだと思います。

  なるほど。

>lib_resizemodule の競合時の動作は
>ファイルのより大きいサイズへの変更は失敗する。
>ファイルのより小さいサイズへの変更は成功する。
>なのでしょうか?

  競合時は、常に失敗します。本当はサイズが変化しない場合は失敗させる必要
はないのですが、今は失敗します。そんなわけで、競合時には常に元のファイル
が保存される結果になるではないでしょうか?

>書き込み動作は最初に 4096byte アラインしたサイズに変更してみる。
>という変更が簡単そうです。

  うまい案です。それならファイルは壊れずに済みそうです。

>が、サイズが足りなくなってからリサイズする方が良いようにも思います。
>気が向いたら次でそうします。

  そう、僕も先に述べたとおり、これがOSASK向きだと思います。

>ついでに、[OSASK 3784] の壁紙の件です。

  ありがとうございます。こんなにすぐにやってもらえてとても助かりました。
ばっちりうまくいっています。これで無事にバンドルできます。