スポンサーリンク

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

名称

VOP_LINK − ファイルの新しい名前の作成

書式

#include <sys/param.h>
#include <sys/vnode.h>

int

VOP_LINK(struct vnode *dvp, struct vnode *vp, struct componentname *cnp);

解説

これは、既存のファイルに対し、指定したディレクトリ中の新しい名前をリンク します。

引数は以下の通りです。

       dvp

ディレクトリの vnode。

vp
リンクされるファイルの vnode。

cnp
ファイルについてのパス名情報。

パス名情報は戻り時に開放されるべきでは ありません。なぜならば、それは呼び 出し側によって行なわれるからです。ディレクトリとファイルの vnode は戻り時 に解放されるべきでは ありません。

ロック

VOP_LINK() はディレクトリおよびファイルの vnode は入る時にロックされ、戻 る時までロックされ続けていることを期待します。

戻り値

ファイルが成功裏にリンクされた場合には 0 が返され、そうでない場合にはエ ラーが返されます。

疑似コード

int
vop_link(struct vnode *dvp, struct vnode *vp, struct componentname *cnp)
{
    int error = 0;

   if (vp->v_mount != dvp->v_mount)

return (EXDEV);

if (vp would have too many links)

return (EMLINK);

if (vp is immutable)

return (EPERM);

/*
* vp のリンクカウントをインクリメントし、ディスクに書き戻します。
*/
...;

if (!error) {

/*

* ディレクトリの新しい名前を追加します。

*/

...;

}

return error;
}

エラー

       [EMLINK]

ファイルのリンクの数が多すぎます。

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

[EXDEV]
異なるファイルシステム間ではハードリンクは利用できませ ん。

関連項目

vn_lock(9), vnode(9)

作者

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

FreeBSD 10.0 July 24, 1996 FreeBSD 10.0

スポンサーリンク