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-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру  |