# attr_set

## NAME



           attr_set, attr_setf - set the value of a user attribute of a
           filesystem object
    


## C SYNOPSIS



           **#include <attr/attributes.h>**
    
           **int attr_set (const char ***_path_**, const char ***_attrname_**,**
                         **const char ***_attrvalue_**, const int** _valuelength_**,**
                         **int** _flags_**);**
    
           **int attr_setf (int** _fd_**, const char ***_attrname_**,**
                          **const char ***_attrvalue_**, const int** _valuelength_**,**
                          **int** _flags_**);**
    


## DESCRIPTION



           The **attr_set** and **attr_setf** functions provide a way to create
           attributes and set/change their values.
    
           _Path_ points to a path name for a filesystem object, and _fd_ refers
           to the file descriptor associated with a file.  If the attribute
           _attrname_ does not exist, an attribute with the given name and
           value will be created and associated with that indicated
           filesystem object.  If an attribute with that name already exists
           on that filesystem object, the existing value is replaced with the
           new value given in this call.  The new attribute value is copied
           from the _attrvalue_ buffer for a total of _valuelength_ bytes.  The
           _flags_ argument can contain the following symbols bitwise OR'ed
           together:
    
           ATTR_ROOT
                  Look for _attrname_ in the **root** address space, not in the
                  **user** address space.  (limited to use by super-user only)
    
           ATTR_DONTFOLLOW
                  Do not follow symbolic links when resolving a _path_ on an
                  **attr_set** function call.  The default is to follow symbolic
                  links.
    
           ATTR_CREATE
                  Return an error (EEXIST) if an attribute of the given name
                  already exists on the indicated filesystem object,
                  otherwise create an attribute with the given name and
                  value.  This flag is used to implement a pure create
                  operation, without this flag **attr_set** will create the
                  attribute if it does not already exist.  An error (EINVAL)
                  will be returned if both ATTR_CREATE and ATTR_REPLACE are
                  set in the same call.
    
           ATTR_REPLACE
                  Return an error (ENOATTR) if an attribute of the given name
                  does not already exist on the indicated filesystem object,
                  otherwise replace the existing attribute's value with the
                  given value.  This flag is used to implement a pure
                  replacement operation, without this flag **attr_set** will
                  create the attribute if it does not already exist.  An
                  error (EINVAL) will be returned if both ATTR_CREATE and
                  ATTR_REPLACE are set in the same call.
    
           **attr_set** will fail if one or more of the following are true:
    
           [ENOATTR]
                  The attribute name given is not associated with the
                  indicated filesystem object and the ATTR_REPLACE flag bit
                  was set.
    
           [E2BIG]
                  The value of the given attribute is too large, it exceeds
                  the maximum allowable size of an attribute value.
    
           [EEXIST]
                  The attribute name given is already associated with the
                  indicated filesystem object and the ATTR_CREATE flag bit
                  was set.
    
           [ENOENT]
                  The named file does not exist.
    
           [EPERM]
                  The effective user ID does not match the owner of the file
                  and the effective user ID is not super-user.
    
           [ENOTDIR]
                  A component of the path prefix is not a directory.
    
           [EACCES]
                  Search permission is denied on a component of the path
                  prefix.
    
           [EINVAL]
                  A bit was set in the _flag_ argument that is not defined for
                  this system call, or both the ATTR_CREATE and ATTR_REPLACE
                  flags bits were set.
    
           [EFAULT]
                  _Path, attrname,_ or _attrvalue_ points outside the allocated
                  address space of the process.
    
           [ELOOP]
                  A path name lookup involved too many symbolic links.
    
           [ENAMETOOLONG]
                  The length of _path_ exceeds {_MAXPATHLEN_}, or a pathname
                  component is longer than {_MAXNAMELEN_}.
    
           **attr_setf** will fail if:
    
           [ENOATTR]
                  The attribute name given is not associated with the
                  indicated filesystem object and the ATTR_REPLACE flag bit
                  was set.
    
           [E2BIG]
                  The value of the given attribute is too large, it exceeds
                  the maximum allowable size of an attribute value.
    
           [EEXIST]
                  The attribute name given is already associated with the
                  indicated filesystem object and the ATTR_CREATE flag bit
                  was set.
    
           [EINVAL]
                  A bit was set in the _flag_ argument that is not defined for
                  this system call, or both the ATTR_CREATE and ATTR_REPLACE
                  flags bits were set, or _fd_ refers to a socket, not a file.
    
           [EFAULT]
                  _Attrname,_ or _attrvalue_ points outside the allocated address
                  space of the process.
    
           [EBADF]
                  _Fd_ does not refer to a valid descriptor.
    


## DIAGNOSTICS



           On success, zero is returned.  On error, -1 is returned, and _errno_
           is set appropriately.
    


* * *