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

VOP_ACCESS

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

VOP_ACCESS


     #include <sys/vnode.h>

     int
     VOP_ACCESS(struct vnode *vp, int mode, struct ucred *cred,
             struct proc *p);


解説

     このエントリポイントは、与えられた証明に対する、ファイルのアクセス許可を
     調査します。

     引数は以下の通りです。

     vp    調査対象ファイルの vnode。

     mode  要求されたアクセスのタイプ。

     cred  調査対象のユーザ証明。

     p     調査しているプロセス。

     mode は VREAD, VWRITE または VEXEC を含むマスクです。


ロック

     vnode は、入る時にロックされ、戻る時にもロックされ続けます。


戻り値

     ファイルが指定された方法でアクセス可能な場合には、0 が返されます。そうで
     ない場合には、適切なエラーコードが返されます。


疑似コード

     int
     vop_access(struct vnode *vp, int mode, struct ucred *cred, struct proc *p)
     {
         int error;

         /*
          * ファイルがソケット、FIFO、またはファイルシステムに存在する
          * ブロック型または文字型デバイスでない場合には、読み込み専用
          * ファイルシステムへの書き込みは認められません。
          */
         if (mode & VWRITE) {
             switch (vp->v_type) {
             case VDIR:
             case VLNK:
             case VREG:
                 if (vp->v_mount->mnt_flag & MNT_RDONLY)
                     return EROFS;

                 break;
             }
         }

             if (mode & VREAD)
                 mask |= S_IRUSR;
             if (mode & VWRITE)
                 mask |= S_IWUSR;
             return (((mode of vp) & mask) == mask ? 0 : EACCES);
         }

         /* そうでなければ、グループを調べます。 */
         for (i = 0, gp = cred->cr_groups; i < cred->cr_ngroups; i++, gp++)
             if (group of vp == *gp) {
                 if (mode & VEXEC)
                     mask |= S_IXGRP;
                 if (mode & VREAD)
                     mask |= S_IRGRP;
                 if (mode & VWRITE)
                     mask |= S_IWGRP;
                 return (((mode of vp) & mask) == mask ? 0 : EACCES);
             }

         /* そうでなければ、その他を調べます。 */
         if (mode & VEXEC)
             mask |= S_IXOTH;
         if (mode & VREAD)
             mask |= S_IROTH;
         if (mode & VWRITE)
             mask |= S_IWOTH;
         return (((mode of vp) & mask) == mask ? 0 : EACCES);
     }


エラー

     [EPERM]            不変ファイルを変更しようとしました。

     [EACCES]           許可されません。


関連項目

     vnode(9)


作者

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

FreeBSD 4.4                      July 24, 1996                     FreeBSD 4.4

ABELNET VPSサービス