EA_SET_ITEM(3EXACCT) Extended Accounting File Access Library Functions
NAME
ea_set_item, ea_alloc, ea_strdup, ea_set_group,
ea_match_object_catalog, ea_attach_to_object, ea_attach_to_group,
ea_free, ea_strfree, ea_free_item, ea_free_object - create, destroy
and manipulate exacct objects
SYNOPSIS
cc [
flag... ]
file...
-lexacct [
library... ]
#include <exacct.h>
int ea_set_item(
ea_object_t *obj,
ea_catalog_t tag,
void *value,
size_t valsize);
void *ea_alloc(
size_t size);
char *ea_strdup(
char *ptr);
int ea_set_group(
ea_object_t *obj,
ea_catalog_t tag);
int ea_match_object_catalog(
ea_object_t *obj,
ea_catalog_t catmask);
void ea_attach_to_object(
ea_object_t *head_obj,
ea_object_t *obj);
void ea_attach_to_group(
ea_object_t *group_obj,
ea_object_t *obj);
void ea_free(
void *ptr,
size_t size);
void ea_strfree(
char *ptr);
int ea_free_item(
ea_object_t *obj,
int flag);
void ea_free_object(
ea_object_t *obj,
int flag);
DESCRIPTION
The
ea_alloc() function allocates a block of memory of the requested
size. This block can be safely passed to
libexacct functions, and can
be safely freed by any of the
ea_free() functions.
The
ea_strdup() function can be used to duplicate a string that is to
be stored inside an
ea_object_t structure.
The
ea_set_item() function assigns the given
exacct object to be a
data item with
value set according to the remaining arguments. For
buffer-based data values (
EXT_STRING,
EXT_EXACCT_OBJECT, and
EXT_RAW), a copy of the passed buffer is taken. In the case of
EXT_EXACCT_OBJECT, the passed buffer should be a packed
exacct object
as returned by
ea_pack_object(3EXACCT). Any item assigned with
ea_set_item() should be freed with
ea_free_item() specifying a flag
value of
EUP_ALLOC when the item is no longer needed.
The
ea_match_object_catalog() function returns
TRUE if the
exacct object specified by
obj has a catalog tag that matches the mask
specified by
catmask.
The
ea_attach_to_object() function attaches an object to the given
object. The
ea_attach_to_group() function attaches a chain of objects
as member items of the given group. Objects are inserted at the end
of the list of any previously attached objects.
The
ea_free() function frees a block of memory previously allocated
by
ea_alloc().
The
ea_strfree() function frees a string previously copied by
ea_strdup().
The
ea_free_item() function frees the
value fields in the
ea_object_t indicated by
obj, if
EUP_ALLOC is specified. The object itself is not
freed. The
ea_free_object() function frees the specified object and
any attached hierarchy of objects. If the
flag argument is set to
EUP_ALLOC,
ea_free_object() will also free any variable-length data
in the object hierarchy; if set to
EUP_NOALLOC,
ea_free_object() will
not free variable-length data. In particular, these flags should
correspond to those specified in calls to
ea_unpack_object(3EXACCT).
RETURN VALUES
The
ea_match_object_catalog() function returns 0 if the object's
catalog tag does not match the given mask, and 1 if there is a match.
Other integer-valued functions return 0 if successful. Otherwise
these functions return -1 and set the extended accounting error code
appropriately. Pointer-valued functions return a valid pointer if
successful and NULL otherwise, setting the extended accounting error
code appropriately. The extended accounting error code can be
examined with
ea_error(3EXACCT).
ERRORS
The
ea_set_item(),
ea_set_group(), and
ea_match_object_catalog() functions may fail if:
EXR_SYSCALL_FAIL A system call invoked by the function failed.
The
errno variable contains the error value set
by the underlying call.
EXR_INVALID_OBJECT The passed object is of an incorrect type, for
example passing a group object to
ea_set_item().
USAGE
The
exacct file format can be used to represent data other than that
in the extended accounting format. By using a unique creator type in
the file header, application writers can develop their own format
suited to the needs of their application.
EXAMPLES
Example 1: Open and close exacct file.
Construct an exacct file consisting of a single object containing the
current process ID.
#include <sys/types.h>
#include <unistd.h>
#include <exacct.h>
...
ea_file_t ef;
ea_object_t obj;
pid_t my_pid;
my_pid = getpid();
ea_set_item(&obj, EXT_UINT32 | EXC_DEFAULT | EXT_PROC_PID,
&my_pid, sizeof(my_pid));
...
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Evolving |
+--------------------+-----------------+
|MT-Level | MT-Safe |
+--------------------+-----------------+
SEE ALSO
read(2),
ea_error(3EXACCT),
ea_open(3EXACCT),
ea_pack_object(3EXACCT),
libexacct(3LIB),
attributes(7) November 28, 2001 EA_SET_ITEM(3EXACCT)