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

VOP_GETATTR

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

VOP_GETATTR


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

     int
     VOP_GETATTR(struct vnode *vp, struct vattr *vap, struct ucred *cred,
             struct proc *p);

     int
     VOP_SETATTR(struct vnode *vp, struct vattr *vap, struct ucred *cred,
             struct proc *p);


解説

     これらのエントリポイントは、ファイルまたはディレクトリの様々な属性を操作
     します。操作対象には、ファイルパーミッション、所有者、グループ、大きさ、
     アクセス時刻、更新時刻を含みます。

     引数は以下の通りです。

     vp    ファイルの vnode。

     vap   ファイルの属性。

     cred  呼び出したプロセスのユーザ証明。

     p     プロセス。

     VOP_SETATTR(9) によって更新されようとしていない属性は VNOVAL が設定されて
     いるべきです。


ロック

     VOP_GETATTR(9) は、入る時に vnode がロックされていて、戻り時まで vnode が
     ロックされたままであることを期待します。

     VOP_SETATTR(9) は、入る時に vnode がロックされていて、戻り時まで vnode が
     ロックされたままであることを期待します。


戻り値

     VOP_GETATTR(9)*vap にファイルの情報を返します。 VOP_SETATTR(9) は属性
     がうまく変更された場合には 0 を返し、そうでない場合には適切なエラーコード
     が返されます。


疑似コード

     int
     vop_getattr(struct vnode *vp, struct vattr *vap,
                 struct ucred *cred, struct proc *p)
     {
         /*
          * *vap をファイルシステムからの情報で埋めます。
          */
         ...;

         return 0;
         }

         if (vap->va_flags != VNOVAL) {
             /*
              * ファイルの変更不能と追加フラグを設定します。
              */
         }

         if (vap->va_uid != (uid_t)VNOVAL || vap->va_gid != (gid_t)VNOVAL) {
             /*
              * ファイルの所有者および/またはグループを変更します。
              */
         }

         if (vap->va_size != VNOVAL) {
             /*
              * ファイルを指定された大きさに切り詰めます。
              */
         }

         if (vap->va_atime.tv_sec != VNOVAL || vap->va_mtime.tv_sec != VNOVAL) {
             /*
              * ファイルのアクセスおよび/または更新時刻を変更します。
              */
         }

         if (vap->va_mode != (mode_t)VNOVAL) {
             /*
              * ファイルのパーミッションを変更します。
              */
         }

         return 0;
     }


エラー

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

     [EACCES]           許可されませんでした。

     [EROFS]            ファイルシステムが読み込み専用です。


関連項目

     vnode(9), VOP_ACCESS(9)


AUTHORS

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

FreeBSD 4.4                      July 24, 1996                     FreeBSD 4.4

ABELNET VPSサービス