Ko-Window プログラマーズマニュアル 「ファイル操作とその注意点」 関連事項: => kowin_p4.doc ●ファイルオープンとヒープ領域 Ko-Window 上で stdio の fopen()〜fclose() などの高レベルファイル操作関数を 使う場合は、必ず WindowHeapSize の設定が必要になります。これは、fopen() 関数 が、FILE 構造体およびそのバッファを malloc() で確保するからです。(この領域は fclose() が free() する) WindowHeapSize は、wlib のグローバル変数です。設定した byte 数だけ起動時に そのアプリケーション用 HEAP 領域として確保します。 例 int WindowHeapSize= 1024*8; ファイルオープン時に必要なヒープ容量は、使用するライブラリによって異なりま す。XCv1/v2-lib ではファイルバッファは 1Kbyte ですが、libc ではこれが 4Kbyte になっています。また同時に複数のファイルをオープンすれば、その数だけ malloc() することになるので、さらに多目に設定しておく必要があります。 直接 DOS CALL を使うような低レベルファイル操作の場合は HeapSize の設定は不 要になります。 ●イベント開放とファイルのオープン Ko-Window のプログラミングにおいて、ファイルをオープンしたままイベントを開 放し、他のプロセスへイベントをまわすことは可能です。ただしオープン中かどうか のフラグをもうけ、EventClose 時に間違いなくファイルをクローズするようなプロ グラムにしておいて下さい。 ファイルをオープンしたままイベントを開放すると、他のプログラムからも同じファ イルへ同時にアクセスが起こる可能性があります。Human68k の場合、同時アクセス するといろいろと不都合が起こる可能性があります(書き込み時)。特に書き込んでい る途中のファイルを削除してしまうとおかしなことになります。 このようなことを防ぐためには、Human v2 以降に設けられたファイルアクセスの ロック機構を使用して下さい。config.sys に SHARE 行を書いておけば、この機能が 働きます。この SHARE 行を書いておけば、同時にファイルオープンしたり、オープ ン中によそからファイル操作したりできなくなりますので、イベントを開放しても安 全になります。 ●ファイルクローズの注意 Ko-Window のアプリケーションでは、自分でオープンしたファイルは必ず自分で責 任を持ってクローズするようにして下さい。それは、ウィンドウアプリケーションが 終了しても、その中で開いたファイルはそのまま開いたままになってしまうからです。 もしプログラムのバグで、オープンしてロックされたままのファイルができてし まった場合は、一度 Ko-Window を終了して起動し直して下さい。Ko-Window サーバー が終了すると、その時点で開いていたファイルを全部クローズしてくれます。 オープンしたファイルを自分でクローズするということは、極めて基本的でかつ不 用意な防ぐことにも繋がるので、通常のプログラミングにおいても必ずそうするよう 普段から意識しておくといいでしょう。 筆者の場合、すでに fopen() とタイプしたと同時に、無意識にも fclose() を一 緒に書き込んで、その行の間にプログラムコードを書き入れていくという習慣が身に 付いてしまいました。 ● Human68k のファイルロックについて補足 このように、SHARE 行はプログラムの変更なしにファイルロックを勝手に行ってく れるので、たいへん便利だしファイルのクローズし忘れのバグも見つけ易くなります。 ただし、ファイルを書き込みオープン中に暴走してリセットしてしまった場合は、 ファイルシステムに書き込んでいる途中の矛盾した残骸が残ってしまうことがありま す。そのため、暴走したあとは fsck.x を使ってファイルシステムをチェックしてお くことをお勧めします。(fsck.x は Ext.氏作のフリーソフトウエアです。) -- 1995 9/15 書き起こし 小笠原博之 oga@dgw.yz.yamagata-u.ac.jp DenDenNET: DEN0006 COR.