b1539bd153
Submitted by: Akira Ikeuchi <a_ikeuchi@mic.mitsumi.co.jp>
169 lines
4.6 KiB
Groff
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
|
|
が書きました。
|