Index Index for
Section 3
Index Alphabetical
listing for I
Bottom of page Bottom of
page

idsetops(3)

NAME

idsetops, idaddset, idandset, idcopyset, idcountset, iddelset, iddiffset, idemptyset, idfillset, idisemptyset, idismember, idorset, idsetcreate, idsetdestroy, idxorset - Perform operations on ID sets (libc library)

SYNOPSIS

#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 );

PARAMETERS

max_id_val Specifies the largest member_id value. member_id Identifies a member of an ID set. set Specifies or points to an ID set. set_dst 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. set_src[n] 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.

DESCRIPTION

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.)

RETURN VALUES

These functions return the following values: 0 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. 1 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. -1 Failure (returned by all functions). In this case, errno is set to indicate the error.

ERRORS

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: [EINVAL] 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: [EFAULT] The address of the specified ID set is invalid. [ENOMEM] 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: [EDOM] The value of member_id is an invalid or unsupported ID identifier.

EXAMPLES

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; }

SEE ALSO

Functions: id_foreach(3)

Index Index for
Section 3
Index Alphabetical
listing for I
Top of page Top of
page