doc/ja_JP.eucJP/man/man9/VOP_ATTRIB.9
Kazuo Horikawa b1539bd153 Catch up with 5.0-CURRENT-20030222-JPSNAP
Submitted by:	Akira Ikeuchi <a_ikeuchi@mic.mitsumi.co.jp>
2003-03-09 22:54:29 +00:00

169 lines
4.6 KiB
Groff

.\" -*- nroff -*-
.\"
.\" Copyright (c) 1996 Doug Rabson
.\"
.\" All rights reserved.
.\"
.\" This program is free software.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" %FreeBSD: src/share/man/man9/VOP_ATTRIB.9,v 1.23 2002/12/24 13:41:46 ru Exp %
.\"
.\" $FreeBSD$
.Dd July 24, 1996
.Os
.Dt VOP_ATTRIB 9
.Sh 名称
.Nm VOP_GETATTR ,
.Nm VOP_SETATTR
.Nd ファイルまたはディレクトリの属性の取得または設定
.Sh 書式
.In sys/param.h
.In sys/vnode.h
.Ft int
.Fn VOP_GETATTR "struct vnode *vp" "struct vattr *vap" "struct ucred *cred" "struct thread *td"
.Ft int
.Fn VOP_SETATTR "struct vnode *vp" "struct vattr *vap" "struct ucred *cred" "struct thread *td"
.Sh 解説
これらのエントリポイントは、
ファイルまたはディレクトリの様々な属性を操作します。
操作対象には、ファイルパーミッション、所有者、グループ、
大きさ、アクセス時刻、更新時刻を含みます。
.Pp
引数は以下の通りです。
.Bl -tag -width cred
.It Fa vp
ファイルの vnode。
.It Fa vap
ファイルの属性。
.It Fa cred
呼び出したプロセスのユーザ証明。
.It Fa td
スレッド。
.El
.Pp
.Fn VOP_SETATTR
によって更新されようとしていない属性は
.Dv VNOVAL
が設定されているべきです。
.Fn VATTR_NULL
は全ての値をクリアするために使用することができ、一般的には
.Fa *vap
の値の明示の前にその内容をリセットするために使用されるべきです。
.Sh ロック
.Fn VOP_GETATTR
は、入る時に vnode がロックされていて、戻り時まで vnode がロックされたままで
あることを期待します。
そのロックの型は共有または排他が可能です。
.Pp
.Fn VOP_SETATTR
は、入る時に vnode がロックされていて、戻り時まで vnode がロックされたままで
あることを期待します。
そのロックの型は排他でなければなりません。
.Sh 戻り値
.Fn VOP_GETATTR
.Fa *vap
を介して属性データを取り出すことができた場合には 0 を返し、
そうでない場合には適切なエラーが返されます。
.Fn VOP_SETATTR
は属性がうまく変更された場合には 0 を返し、
そうでない場合には適切なエラーが返されます。
.Sh 疑似コード
.Bd -literal
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;
}
.Ed
.Sh エラー
.Bl -tag -width Er
.It Bq Er EPERM
ファイルは変更不可能です。
.It Bq Er EACCES
呼び出し側がそのファイルまたはディレクトリの属性を修正するパーミッションを
持っていません。
.It Bq Er EROFS
ファイルシステムが読み込み専用です。
.El
.Sh 関連項目
.Xr VFS 9 ,
.Xr vnode 9 ,
.Xr VOP_ACCESS 9
.Sh 作者
このマニュアルページは
.An Doug Rabson
が書きました。