IO インターフェイス

fml8 チュートリアル (バージョン 7.99.1-20180910)
Prev |  | Next

# Chapter 49. IO インターフェイス

将来の移植性/拡張性を見据えるなら、ＭＬサーバの設計においても UNIX における Vnode/VFS interface (vnode(9)参照) のような構造をあらかじめ導入しておくべきでしょう。

例: NetBSD の vnode 構造体。

    struct vnode {
    		...
            voff_t          v_size;                 /* size of file */
            int             v_numoutput;            /* num pending writes */
            long            v_writecount;           /* ref count of writers */
    		...
            int             (**v_op)(void *);       /* vnode ops vector */
    		...
            void            *v_data;                /* private data for fs */
    };

v_op の先に、 vop_open() vop_read() vop_getattr() などが定義されます。

つまり struct vnode の **v_op (vnode operation vector) にあたるものが IO に使われるクラスの各メソッドです。

fml8 では IO::Adapter クラスという抽象化されたインターフェイスを使います。 このクラスはユーザリストというオブジェクトに対する IO インターフェイスを抽象化したものです。

# IO::Adapter の基本形

fml8 の設計上の手本となるクラスは IO::Adapter といえるでしょう。実装もすでに完成形であり、primitive なメソッドは何か？ などについても十分考えぬかれています。

IO::Adapter クラスは

    KEY => VALUE

もしくは

    KEY => [ VALUE, VALUE2, VALUE3 ]

のいづれかの型のデータ構造を抽象化していると考えられます。 つまり、これは RDBMS の基礎理論同様の表型データ構造です。

    KEY1 VALUE1-1 ""     ""
    KEY2 VALUE2-1 VALUE2-2 VALUE2-3
    KEY3 VALUE3-1 VALUE3-2 VALUE3-3
    KEY4 VALUE4-1 VALUE4-2 VALUE4-3

ユーザリストを管理する上で必要最低限の基本メソッド群は、 IO::Adapter の

    open()
    close()

および、そのオブジェクトへの IO である

    add(KEY, ARGV) (ARGV はクラス依存のデータ渡しのためにある引数)
    delete(KEY)
    find(KEY or REGEXP)
    get_next_key()

があれば十分のようです。 少なくとも、ユーザ管理は、これらのメソッドだけで十分書けます。

Prev | Home | Next
エラーメッセージをフォワードする | Up | メソッド

fml 8.0 (fml-devel) project homepage is www.fml.org/software/fml8/.
fml 4.0 project homepage is www.fml.org/software/fml4/.
about one floppy bsd routers, see www.bsdrouter.org/.
other free softwares are found at www.fml.org/software/.

author's homepage is www.fml.org/home/fukachan/.
Also, visit nuinui's world :) at www.nuinui.net.

For questions about FML, e-mail <fml-bugs@fml.org>.