| 総合手引 | セクション 9 | English | オプション |
#include <sys/param.h>
#include <sys/vnode.h>
引数は以下の通りです。
| vp | |
| ファイルの vnode。 | |
| vap | |
| ファイルの属性。 | |
| cred | |
| 呼び出したプロセスのユーザ証明。 | |
| td | |
| スレッド。 | |
VOP_SETATTR() によって更新されようとしていない属性は VNOVAL が設定されているべきです。 VATTR_NULL() は全ての値をクリアするために使用することができ、一般的には *vap の値の明示の前にその内容をリセットするために使用されるべきです。
VOP_SETATTR() は、入る時に vnode がロックされていて、戻り時まで vnode がロックされたままで あることを期待します。 そのロックの型は排他でなければなりません。
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] | |
| ファイルシステムが読み込み専用です。 | |
| VOP_ATTRIB (9) | July 24, 1996 |
| 総合手引 | セクション 9 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
| “ | The number of UNIX installations has grown to 10, with more expected. | ” |
| — UNIX Programming Manual, 1972 | ||