vop_attrib(9)

NAME

VOP_GETATTR, VOP_SETATTR - get and set attributes on a file
or directory

SYNOPSIS

#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);

DESCRIPTION

These entry points manipulate various attributes of a file
or directory,
including file permissions, owner, group, size, access time
and modification time.
The arguments are:
vp The vnode of the file.
vap The attributes of the file.
cred The user credentials of the calling process.
td The thread.
Attributes which are not being modified by VOP_SETATTR()
should be set to
the value VNOVAL; VATTR_NULL() may be used to clear all the
values, and
should generally be used to reset the contents of *vap prior
to setting
specific values.

LOCKS

VOP_GETATTR() expects the vnode to be locked on entry and
will leave the
vnode locked on return. The lock type can be either shared
or exclusive.
VOP_SETATTR() expects the vnode to be locked on entry and
will leave the
vnode locked on return. The lock type must be exclusive.

RETURN VALUES

VOP_GETATTR() returns 0 if it was able to retrieve the at
tribute data via
*vap, otherwise an appropriate error is returned.

VOP_SETATTR

zero if the attributes were changed successfully, otherwise
an appropriate error is returned.

PSEUDOCODE

int
vop_getattr(struct vnode *vp, struct vattr *vap,
struct ucred *cred, struct thread *td)
{
/*
* Fill in the contents of *vap with information from
* the file system.
*/
...;
return 0;
}
int
vop_setattr(struct vnode *vp, struct vattr *vap,
struct ucred *cred, struct thread *td)
{
/*
* Check for unsettable attributes.
*/
if ((vap->va_type != VNON) || (vap->va_nlink != VNOVAL)
(vap->va_fsid != VNOVAL) || (vap->va_fileid != VNO
VAL)
(vap->va_blocksize != VNOVAL) || (vap->va_rdev !=
VNOVAL)
((int)vap->va_bytes != VNOVAL) || (vap->va_gen !=
VNOVAL)) {
return (EINVAL);
}
if (vap->va_flags != VNOVAL) {
/*
* Set the immutable and append flags of the file.
*/
}
if (vap->va_uid != (uid_t)VNOVAL || vap->va_gid !=
(gid_t)VNOVAL) {
/*
* Change owner and/or group of the file.
*/
}
if (vap->va_size != VNOVAL) {
/*
* Truncate the file to the specified size.
*/
}
if (vap->va_atime.tv_sec != VNOVAL
vap->va_mtime.tv_sec != VNOVAL) {
/*
* Change access and/or modification time of file.
*/
}
if (vap->va_mode != (mode_t)VNOVAL) {
/*
* Change permissions of file.
*/
}
return 0;
}

ERRORS

[EPERM] The file is immutable.

[EACCES] The caller does not have permission to
modify the file
or directory attributes.
[EROFS] The file system is read-only.

SEE ALSO

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

AUTHORS

This manual page was written by Doug Rabson.
BSD July 24, 1996
Copyright © 2010-2025 Platon Technologies, s.r.o.           Home | Man pages | tLDP | Documents | Utilities | About
Design by styleshout