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 != 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) {
/** 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 != VNOVALvap->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