スポンサーリンク

VOP_REMOVE(9) FreeBSD カーネル開発者マニュアル VOP_REMOVE(9)

名称

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

書式

#include <sys/param.h>
#include <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 が書きました。

FreeBSD 10.0 July 24, 1996 FreeBSD 10.0

スポンサーリンク