VOP_LINK(9) FreeBSD 一般コマンドマニュアル

VOP_LINK

前のページ 上に戻る 次のページ

VOP_LINK


     #include <sys/vnode.h>

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


解説

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

     引数は以下の通りです。

     dvp       ディレクトリの vnode。

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

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

     パス名情報は、戻り時に開放されなければなりません。ディレクトリとファイル
     の vnode は戻り時に開放されるべきではありません。


ロック

     ディレクトリ dvp は、入る時にロックされていて、戻り時もロックされ続けてい
     るべきです。ファイル vp は、入る時にロックされておらず、戻り時もそのまま
     であるべきです。 VOP コードが vp をロックする場合には、戻る前に必ずロック
     を解除しなければなりません。


戻り値

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


疑似コード

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

         if (vp->v_mount != dvp->v_mount) {
             VOP_ABORTOP(dvp, cnp);
             error = EXDEV;
             goto out2;
         }
         if (vp != dvp && (error = VOP_LOCK(vp))) {
             VOP_ABORTOP(dvp, cnp);
             goto out2;
         }

         /*
          * 今、vp をロックしたので、out2 の代わりに out1 を使用
          * しなければなりません。
          */

         if (vp would have too many links) {
         ...;

         if (!error) {
             /*
              * ディレクトリの新しい名前を追加します。
              */
             ...;
         }

         free(cnp->cn_pnbuf, M_NAMEI);
     out1:
         if (vp != dvp)
             VOP_UNLOCK(vp);
     out2:

         return error;
     }


エラー

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


関連項目

     vnode(9), vn_lock(9)


作者

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

FreeBSD 4.4                      July 24, 1996                     FreeBSD 4.4

ABELNET VPSサービス