スポンサーリンク

VOP_ATTRIB(9) FreeBSD カーネル開発者マニュアル VOP_ATTRIB(9)

名称

VOP_GETATTR, VOP_SETATTR − ファイルまたはディレクトリの属性の取得または設 定

書式

#include <sys/param.h>
#include <sys/vnode.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)

{
/*
* *vap をファイルシステムからの情報で埋めます。
*/
...;

return 0;
}

int
vop_setattr(struct vnode *vp, struct vattr *vap,

struct ucred *cred, struct thread *td)

{
/*
* 設定できない属性をチェックします。
*/
if ((vap->va_type != VNON) || (vap->va_nlink != VNOVAL) ||

(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]
ファイルシステムが読み込み専用です。

関連項目

VFS(9), vnode(9), VOP_ACCESS(9)

作者

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

FreeBSD 10.0 July 24, 1996 FreeBSD 10.0

スポンサーリンク