VOP_LINK(9)

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

書式
<sys/param.h> <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]
    異なるファイルシステム間ではハードリンクは利用できません。

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

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