FGETATTR(3C)            Standard C Library Functions            FGETATTR(3C)
NAME
       fgetattr, fsetattr, getattrat, setattrat - get and set system
       attributes
SYNOPSIS
       #include <fcntl.h>
       #include <sys/types.h>
       #include <attr.h>
       #include <sys/nvpair.h>       
int fgetattr(
int fildes, 
xattr_view_t view,
nvlist_t **response);       
int fsetattr(
int fildes, 
xattr_view_t view,
nvlist_t *request)       
int getattrat(
int fildes, 
xattr_view_t view, 
const char *filename,            
nvlist_t **response);       
int setattrat(
int fildes, 
xattr_view_t view, 
const char *filename,            
nvlist_t *request);
DESCRIPTION
       The 
fgetattr() function obtains an nvlist of system attribute
       information about an open file object specified by the file
       descriptor 
fildes, obtained from a successful 
open(2), 
creat(2),       
dup(2), 
fcntl(2), or 
pipe(2) function.
       The 
getattrat() function first opens the extended attribute file
       specified by 
filename in the already opened file directory object
       specified by 
fildes. It then retrieves an nvlist of system attributes
       and their values from 
filename.
       The 
response argument is allocated by either 
fgetattr() or       
getattrat(). The application must call 
nvlist_free(3NVPAIR) to
       deallocate the memory.
       Upon successful completion, the nvlist will contain one nvpair for
       each of the system attributes associated with 
view.  The list of
       views and the attributes associated with each view are listed below.
       Not all underlying file systems support all views and all attributes.
       The nvlist will not contain an nvpair for any attribute not supported
       by the underlying filesystem.
       The 
fsetattr() function uses the nvlist pointed to by 
request to
       update one or more of the system attribute's information about an
       open file object specified by the file descriptor 
fildes, obtained
       from a successful 
open(), 
creat(), 
dup(), 
fcntl(), or 
pipe()       function. The 
setattrat() function first opens the extended attribute
       file specified by 
filename in the already opened file directory
       object specified by 
fildes. It then uses the nvlist pointed to by       
request to update one or more of the system attributes of filename.
       If completion is not successful then no system attribute information
       is updated.
       The following chart lists the supported views, attributes, and  data
       types for each view:
               View              Attribute           Data type
       -------------------------------------------------------------       
XATTR_VIEW_READONLY    A_FSID             uint64_value                              A_OPAQUE           boolean_value                              A_AV_SCANSTAMP     uint8_array[]       XATTR_VIEW_READWRITE   A_READONLY         boolean_value                              A_HIDDEN           boolean_value                              A_SYSTEM           boolean_value                              A_ARCHIVE          boolean_value                              A_CRTIME           uint64_array[2]                              
A_NOUNLINK         boolean_value                              A_IMMUTABLE        boolean_value                              A_APPENDONLY       boolean_value                              A_NODUMP           boolean_value                              A_AV_QUARANTINED   boolean_value                              A_AV_MODIFIED      boolean_value                              A_OWNERSID         nvlist composed of                                                 
uint32_value and                                                 
string                              A_GROUPSID         nvlist composed of                                                 
uint32_value and                                                 
string                              A_OFFLINE          boolean_value                              A_SPARSE           boolean_valueRETURN VALUES
       Upon successful completion, 0 is returned. Otherwise, -1  is returned
       and 
errno is set to indicate the error.
ERRORS
       The 
fgetattr(), 
getattrat(), 
fsetattr(), and 
setattrat(), functions
       will fail if:       
EBADF                 The 
fildes argument is not a valid open file descriptor.       
EINVAL                 The underlying file system does not support extended file
                 attributes.       
EIO                 An error occurred while reading from the file system.
       The 
getattrat() and 
setattrat() functions will fail if:       
EACCES                 Search permission or write permission for 
filename is
                 denied.       
ENOENT                 The 
filename argument does not name an existing file in the
                 extended attribute directory represented by 
fildes.       
EPERM                 There are insufficient privileges to manipulate attributes.
EXAMPLES
       Example 1: Obtain an nvlist of readonly system attributes for an open
       file object.
       Use 
fgetattr() to obtain an nvlist of the readonly system attributes
       for the open file object represented by file descriptor 
fildes.
         #include <fcntl.h>
         #include <sys/types.h>
         #include <attr.h>
         #include <sys/nvpair.h>
         nvlist_t *response;
         nvpair_t *pair = NULL;
         if (fgetattr(fildes, XATTR_VIEW_READONLY, &response)) {                      
exit(1);
         }
         while (pair = nvlist_next_nvpair(response, pair)) {
             .
             .
             .
         }
         nvlist_free(response);
       Example 2: Set the A_READONLY system attribute on an open file object.
       Use 
fsetattr() to set the 
A_OPAQUE system attribute on the open file
       object represented by file descriptor 
fildes.
         nvlist_t *request;
         nvpair_t *pair = NULL;
         if (nvlist_alloc(&request, NV_UNIQUE_NAME, 0) != 0) {                     
exit(1);
         }
         if (nvlist_add_boolean_value(request, A_READONLY, 1) != 0) {                     
exit(1);
         }
         if (fsetattr(fildes, XATTR_VIEW_READWRITE, request)) {                     
exit(1);
         }
       Example 3: Obtain an nvlist of the read/write system attributes for a
       file.
       Use 
getattrat() to obtain an nvlist of the read/write system
       attributes for the file named 
xattrfile in the extended attribute
       directory of the open file represented by file descriptor 
fildes.
         nvlist_t *response;
         nvpair_t *pair = NULL;
         if (getattrat(fildes, XATTR_VIEW_READWRITE, "file", &response)) {                      
exit(1);
         }
         while (pair = nvlist_next_nvpair(response, pair)) {
             .
             .
             .
         }
         nvlist_free(response);
       Example 4: Set the A_APPENDONLY system attribute on a file.
       Use 
setattrat() to set the 
A_APPENDONLY system attribute on the file
       named 
file in the extended attribute directory of the open file
       represented by file descriptor 
fildes.
         nvlist_t *request;
         nvpair_t *pair = NULL;
         if (nvlist_alloc(&request, NV_UNIQUE_NAME, 0) != 0) {                     
exit(1);
         }
         if (nvlist_add_boolean_value(request, A_APPENDONLY, 1) != 0) {                     
exit(1);
         }
         if (setattrat(fildes, XATTR_VIEW_READWRITE, "file", request)) {                     
exit(1);
              }
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+-----------------+
       |  ATTRIBUTE TYPE    | ATTRIBUTE VALUE |
       +--------------------+-----------------+
       |Interface Stability | Committed       |
       +--------------------+-----------------+
       |MT-Level            | Safe            |
       +--------------------+-----------------+
SEE ALSO
       creat(2), 
dup(2), 
fcntl(2), 
fstat(2), 
fstatat(2), 
open(2), 
pipe(2),       
libnvpair(3LIB), 
attributes(7), 
fsattr(7)                              November 24, 2014                 FGETATTR(3C)