VOP_GETATTR VOP_SETATTR - get and set attributes on a file or directory
The arguments are:
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
Fa *vap
prior to setting specific values.
VOP_SETATTR ();
expects the vnode to be locked on entry and will leave the vnode locked on
return.
The lock type must be exclusive.
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; }
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |