VOP_OPEN(9)

名称
VOP_OPEN, VOP_CLOSE - ファイルのオープンまたはクローズ

書式
<sys/param.h> <sys/vnode.h> int VOP_OPEN(struct vnode *vp, int mode, struct ucred *cred, struct thread *td, int fdidx) int VOP_CLOSE(struct vnode *vp, int mode, struct ucred *cred, struct thread *td)

解説
VOP_OPEN() エントリポイントは、 ファイルがプロセスによってアクセスされる前に呼び出され、 VOP_CLOSE() エントリポイントは、 ファイルに対するプロセスの仕事の完了後に呼び出されます。

引数は以下の通りです。

vp  ファイルの vnode。

mode
    呼び出しプロセスによって要求されたアクセスモード。

td  ファイルにアクセスしているスレッド。

加えて、 VOP_OPEN() は fdidx の中のファイル記述子番号を受け入れることが可能です。 これは例えば fdesc(5) のような情報を要求するファイルシステムで有用です。

アクセスモードは、 FREAD, FWRITE, O_NONBLOCK, O_APPEND を含むフラグの組です。

ロック
VOP_OPEN() は、入る時に vp がロックされていることを期待し、戻り時までロックされたままにします。

VOP_CLOSE() は、vnode に結びつけられた参照が少なくとも 1 個は存在することを期待し、 vnode がロックされているかどうかは気にしません。 ロックおよび参照状態は、戻る時に変更されずにそのままになります。 vn_close は、ロックされていない参照された vnode を期待し、 戻る前に参照を手繰ることに注意してください。

実装に関する注
VOP_OPEN() への fdidx 引数は現在使用されておらず、当面は ‘-1’ を使用します。 しかしながら、これは将来変更されます。

戻り値
成功時には 0 が返され、そうでない場合にはエラーコードが返されます。

疑似コード

    int
    vop_open(struct vnode *vp, int mode, struct ucred *cred, struct thread *td)
    {
        /*
         * ほとんどのファイルシステムは、ここでは大したことはしません。
         */
        return 0;
    }

関連項目
vnode(9), VOP_LOOKUP(9)

作者
このマニュアルページは Doug Rabson が書きました。