VOP_REMOVE(9)

名称
VOP_REMOVE, VOP_RMDIR - ファイルまたはディレクトリの削除

書式
<sys/param.h> <sys/vnode.h> int VOP_REMOVE(struct vnode *dvp, struct vnode *vp, struct componentname *cnp) int VOP_RMDIR(struct vnode *dvp, struct vnode *vp, struct componentname *cnp)

解説
これらのエントリポイントは、それぞれファイルとディレクトリを削除します。

引数は以下の通りです。

dvp ディレクトリの vnode。

vp  削除対象ファイルの vnode。

cnp ファイルのパス名情報。

ロック
dvp および vp 共に、入る時にロックされているべきで、戻り時もロックされ続けています。

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

疑似コード

    int
    vop_remove(struct vnode *dvp, struct vnode *vp, struct componentname *cnp)
    {
        int error = 0;
        if (vp is immutable) {
    	error = EPERM;
    	goto out;
        }
        /*
         * ディレクトリから cnp->cn_nameptr の名前を削除し、vp のリンク
         * カウントを更新します。
         */
        ...;
        /*
         * "." の削除を試みる場合は注意してください。XXX これはより
         * 上層で取り扱われるべきです。
         */
        if (dvp == vp)
    	vrele(vp);
        else
    	vput(vp);
        vput(dvp);
        return error;
    }

エラー

[EPERM]
    ファイルは変更不可能です。

[ENOTEMPTY]
    空ではないディレクトリを削除しようとしました。

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

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