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)