:man| Alphabetical   Categories   About us 
 
VOP_ATTRIB (9) | Kernel routines | Unix Manual Pages | :man

NAME

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

CONTENTS

Synopsis
Description
Locks
Return Values
Pseudocode
Errors
See Also
Authors

SYNOPSIS


.In sys/param.h
.In 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 attribute data via *vap, otherwise an appropriate error is returned. VOP_SETATTR returns 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 != 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

 
Created by Blin Media, 2008-2013