VOP_ATTRIB(9) FreeBSD カーネル開発者マニュアル VOP_ATTRIB(9)
名称
|
VOP_GETATTR, VOP_SETATTR − ファイルまたはディレクトリの属性の取得または設 定 |
書式
|
#include <sys/param.h> int |
|
VOP_GETATTR(struct vnode *vp, struct vattr *vap, struct ucred *cred, struct thread *td); int |
|
VOP_SETATTR(struct vnode *vp, struct vattr *vap, struct ucred *cred, struct thread *td); |
|
解説 |
|
これらのエントリポイントは、ファイルまたはディレクトリの様々な属性を操作 します。操作対象には、ファイルパーミッション、所有者、グループ、大きさ、 アクセス時刻、更新時刻を含みます。 引数は以下の通りです。 |
vp
|
ファイルの vnode。 vap cred td VOP_SETATTR() によって更新されようとしていない属性は VNOVAL が設定されて いるべきです。 VATTR_NULL() は全ての値をクリアするために使用することがで き、一般的には *vap の値の明示の前にその内容をリセットするために使用され るべきです。 ロック |
|
VOP_GETATTR() は、入る時に vnode がロックされていて、戻り時まで vnode が ロックされたままであることを期待します。そのロックの型は共有または排他が 可能です。 VOP_SETATTR() は、入る時に vnode がロックされていて、戻り時まで vnode が ロックされたままであることを期待します。そのロックの型は排他でなければな りません。 |
戻り値
|
VOP_GETATTR() は *vap を介して属性データを取り出すことができた場合には 0 を返し、そうでない場合には適切なエラーが返されます。 VOP_SETATTR() は属性 がうまく変更された場合には 0 を返し、そうでない場合には適切なエラーが返さ れます。 |
疑似コード
int vop_getattr(struct vnode *vp, struct vattr *vap, |
|
struct ucred *cred, struct thread *td) |
|
{ return 0; int |
|
struct ucred *cred, struct thread *td) |
|
{ |
|
(vap->va_fsid != VNOVAL) || (vap->va_fileid != VNOVAL) || |
|
|
(vap->va_blocksize != VNOVAL) || (vap->va_rdev != VNOVAL) || |
|
|
((int)vap->va_bytes != VNOVAL) || (vap->va_gen != VNOVAL)) { |
|
|
return (EINVAL); |
|
} 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] 関連項目 |
作者
|
このマニュアルページは Doug Rabson が書きました。 FreeBSD 10.0 July 24, 1996 FreeBSD 10.0 |