idsetops, idaddset, idandset, idcopyset, idcountset,
iddelset, iddiffset, idemptyset, idfillset, idisemptyset,
idismember, idorset, idsetcreate, idsetdestroy, idxorset -
Perform operations on ID sets (libc library)
#include <idset.h>
int idaddset(
idset_t set,
idid_t member_id ); int idandset(
idset_t set_src1,
idset_t set_src2,
idset_t set_dst ); int idcopyset(
idset_t set_src,
idset_t set_dst ); int idcountset(
idset_t set ); int iddelset(
idset_t set,
idid_t member_id ); int iddiffset(
idset_t set_src1,
idset_t set_src2,
idset_t set_dst ); int idemptyset(
idset_t set ); int idfillset(
idset_t set ); int idisemptyset(
idset_t set ); int idismember(
idset_t set,
idid_t member_id ); int idorset(
idset_t set_src1,
idset_t set_src2,
idset_t set_dst ); int idsetcreate(
idset_t *set,
int max_id_val ); int idsetdestroy(
idset_t *set ); int idxorset(
idset_t set_src1,
idset_t set_src2,
idset_t set_dst );
Specifies the largest member_id value. Identifies a member
of an ID set. Specifies or points to an ID set.
Specifies an ID set that is being copied to or that is the
result of a logical OR, XOR, or AND operation on two other
ID sets. Specifies a ID set that is being copied to
another ID set or that is part of a logical OR, XOR, or
AND operation with another ID set.
The ID set operation primitives manipulate sets of member
IDs by operating on objects (of type idset_t) that are
created by idsetcreate(). Unlike a CPU set or RAD set,
whose members are CPU or RAD identifiers, an ID set is
generic and can be created for any type of identifier
(process, thread, file, and so forth). The max_id_val
argument specifies the maximum value for any member_id, as
appropriate for the type of identifier contained by the
set.
The idsetcreate() function allocates, and sets to empty,
an ID set pointed to by set.
The idsetdestroy() function releases the memory that was
obtained by idsetcreate() for the specified ID set pointed
to by set.
The idcountset() function returns the number of members in
the ID set specified by set.
The idemptyset() function initializes the ID set specified
by set, such that no members are included in the set.
The idfillset() function initializes the ID set specified
by set, such that all members that are currently configured
in the caller's partition are included in the set.
The idismember() function tests whether the ID set member
specified by the value of member_id is a member of the ID
set specified by set.
The idisemptyset() function tests whether the ID set specified
by the set is empty.
The idcopyset() function copies the contents of the ID set
specified by set_src to the ID set specified by set_dst.
The idaddset() and iddelset() functions respectively add
or delete the members specified by the value of member_id
to or from the ID set specified by set.
The idandset(), idorset(), and idxorset() functions perform
a logical AND, OR, or XOR operation, respectively, on
the ID sets specified by set_src1 and set_src2, storing
the result in the ID set specified by set_dst.
The iddiffset() function finds the logical difference
between the ID sets specified by set_src1 and set_src2,
storing the result in the ID set specified by set_dst.
(The result is made up of members that are included in
set_src1 but not in
set_src2.)
These functions return the following values: Success
(returned by all functions).
For idisemptyset() and idismember() only, 0 also
means the condition being tested is false; that is,
the specified ID set is not empty or does not contain
the specified member. Success (returned by
idisemptyset() and idismember()only). This return
value also means the condition being tested is
true; that is, the specified ID set is empty or
contains the specified member. Failure (returned
by all functions). In this case, errno is set to
indicate the error.
The idaddset(), idandset(), idcopyset(), idcountset(),
iddelset(), iddiffset(), idemptyset(), idfillset(), idisemptyset(),
idismember(), idorset(), and idxorset() functions
set errno to the following value for the corresponding
condition: The value of a set or set_* argument is
invalid (possibly is not a ID set created by idsetcreate()).
The idsetcreate() and idsetdestroy() functions set errno
to one of the the following values for the corresponding
condition: The address of the specified ID set is invalid.
For idsetcreate() only, no memory could be allocated for
the specified ID set.
If the idaddset(), iddelset(), and idismember() functions
fail, they set errno to the following value for the reason
specified: The value of member_id is an invalid or unsupported
ID identifier.
The following example demonstrates a variety of ID set
operations. This program arbitrarily specifies INT_MAX for
the idsetcreate() function's max_id_val argument. INT_MAX
is the largest value currently supported by the idid_t
type and would result in a very large ID index structure.
For set operations on a specific type of ID, such as a
process ID, you would specify the largest expected value
for that type of identifier. Creating an index structure
that can access larger ID values than will occur on the
system wastes memory.
#include <idset.h>
int main() {
idset_t idset, idset2;
/* Create idsets - initialized as empty */
idsetcreate(&idset, INT_MAX);
idsetcreate(&idset2, INT_MAX);
/* demonstrate idset operations */
/* add id 0 to idset */
if (idaddset(idset, 0) == -1) {
perror("idaddset");
return 0;
}
/* copy idset to idset2 */
if (idcopyset(idset, idset2) == -1) {
perror("idcopyset");
return 0;
}
if (idaddset(idset, 1) == -1) {
/* add id 1 to idset */
perror("idaddset");
return 0;
}
/* difference of idset and idset2, store in idset
*/
if (iddiffset(idset, idset2, idset) == -1) {
perror("iddiffset");
return 0;
}
/* Enumerate idset. */
while (1) {
idid_t id;
int flags = SET_CURSOR_CONSUME;
id_cursor_t id_cursor = SET_CURSOR_INIT;
id = id_foreach(idset, flags, &id_cursor);
if (id == ID_NONE) {
printf("\n");
break;
} else {
printf("%3d ", id);
}
}
/* Destroy idset */
idsetdestroy(&idset);
idsetdestroy(&idset2);
return 0; }
Functions: id_foreach(3)
idsetops(3)
[ Back ] |