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 |