SD−ID128 - Online Linux Manual PageSection : 3
Updated :
Source : systemd 250
Note : sd-id128

NAMEsd-id128, SD_ID128_ALLF, SD_ID128_CONST_STR, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL, SD_ID128_MAKE, SD_ID128_MAKE_STR, SD_ID128_MAKE_UUID_STR, SD_ID128_NULL, SD_ID128_UUID_FORMAT_STR, sd_id128_equal, sd_id128_in_set, sd_id128_in_set_sentinel, sd_id128_in_setv, sd_id128_is_allf, sd_id128_is_null, sd_id128_t − APIs for processing 128−bit IDs

SYNOPSIS#include <systemd/sd−id128​.h>pkg−config −−cflags −−libs libsystemd

DESCRIPTIONsd−id128​.h provides APIs to process and generate 128−bit ID values​. The 128−bit ID values processed and generated by these APIs are a generalization of OSF UUIDs as defined by RFC 4122[1] but use a simpler string format​. These functions impose no structure on the used IDs, much unlike OSF UUIDs or Microsoft GUIDs, but are mostly compatible with those types of IDs​. See sd_id128_to_string(3), sd_id128_randomize(3) and sd_id128_get_machine(3) for more information about the implemented functions​. A 128−bit ID is implemented as the following union type: typedef union sd_id128 { uint8_t bytes[16]; uint64_t qwords[2]; } sd_id128_t;This union type allows accessing the 128−bit ID as 16 separate bytes or two 64−bit words​. It is generally safer to access the ID components by their 8−bit array to avoid endianness issues​. This union is intended to be passed call−by−value (as opposed to call−by−reference) and may be directly manipulated by clients​. A couple of macros are defined to denote and decode 128−bit IDs: SD_ID128_MAKE() may be used to denote a constant 128−bit ID in source code​. A commonly used idiom is to assign a name to a 128−bit ID using this macro: #define SD_MESSAGE_COREDUMP SD_ID128_MAKE(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1)SD_ID128_NULL may be used to refer to the 128−bit ID consisting of only NUL bytes (i​.e​. all bits off)​. SD_ID128_ALLF may be used to refer to the 128−bit ID consisting of only 0xFF bytes (i​.e​. all bits on)​. SD_ID128_MAKE_STR() is similar to SD_ID128_MAKE(), but creates a const char* expression that can be conveniently used in message formats and such: #include <stdio​.h> #define SD_MESSAGE_COREDUMP_STR SD_ID128_MAKE_STR(fc,2e,22,bc,6e,e6,47,b6,b9,07,29,ab,34,a2,50,b1) int main(int argc, char **argv) { puts("Match for coredumps: MESSAGE_ID=" SD_MESSAGE_COREDUMP_STR); }SD_ID128_CONST_STR() may be used to convert constant 128−bit IDs into constant strings for output​. The following example code will output the string "fc2e22bc6ee647b6b90729ab34a250b1": int main(int argc, char *argv[]) { puts("Match for coredumps: %s", SD_ID128_CONST_STR(SD_MESSAGE_COREDUMP)); }SD_ID128_FORMAT_STR and SD_ID128_FORMAT_VAL() may be used to format a 128−bit ID in a printf(3) format string, as shown in the following example: int main(int argc, char *argv[]) { sd_id128_t id; id = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07); printf("The ID encoded in this C file is " SD_ID128_FORMAT_STR "​.\n", SD_ID128_FORMAT_VAL(id)); return 0; }SD_ID128_UUID_FORMAT_STR and SD_ID128_MAKE_UUID_STR() are similar to SD_ID128_FORMAT_STR and SD_ID128_MAKE_STR(), but include separating hyphens to conform to the "canonical representation[2]"​. They format the string based on RFC4122[1] Variant 1 rules, i​.e​. converting from Big Endian byte order​. This matches behaviour of most other Linux userspace infrastructure​. It's probably best to avoid UUIDs of other variants, in order to avoid unnecessary ambiguities​. All 128−bit IDs generated by the sd−id128 APIs strictly conform to Variant 1 Version 4 UUIDs, as per RFC 4122​. Use sd_id128_equal() to compare two 128−bit IDs: int main(int argc, char *argv[]) { sd_id128_t a, b, c; a = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07); b = SD_ID128_MAKE(f2,28,88,9c,5f,09,44,15,9d,d7,04,77,58,cb,e7,3e); c = a; assert(sd_id128_equal(a, c)); assert(!sd_id128_equal(a, b)); return 0; }Use sd_id128_is_null() to check if an 128−bit ID consists of only NUL bytes: assert(sd_id128_is_null(SD_ID128_NULL));Similarly, use sd_id128_is_allf() to check if an 128−bit ID consists of only 0xFF bytes (all bits on): assert(sd_id128_is_allf(SD_ID128_ALLF));For convenience, sd_id128_in_set() takes a list of IDs and returns true if any are equal to the first argument: int main(int argc, char *argv[]) { sd_id12_t a = SD_ID128_MAKE(ee,89,be,71,bd,6e,43,d6,91,e6,c5,5d,eb,03,02,07); assert(sd_id128_in_set(a, a)); assert(sd_id128_in_set(a, a, a)); assert(!sd_id128_in_set(a)); assert(!sd_id128_in_set(a, SD_ID128_MAKE(f2,28,88,9c,5f,09,44,15,9d,d7,04,77,58,cb,e7,3e) SD_ID128_MAKE(2f,88,28,5f,9c,44,09,9d,d7,15,77,04,bc,85,7e,e3) SD_ID128_ALLF)); return 0; }sd_id128_in_set() is defined as a macro over sd_id128_in_set_sentinel(), adding the SD_ID128_NULL sentinel​. Since sd_id128_in_set_sentinel() uses SD_ID128_NULL as the sentinel, SD_ID128_NULL cannot be otherwise placed in the argument list​. sd_id128_in_setv() is similar to sd_id128_in_set_sentinel(), but takes a struct varargs argument​. Note that new, randomized IDs may be generated with systemd-id128(1)'s new command​.

NOTESThese APIs are implemented as a shared library, which can be compiled and linked to with the libsystemd ​pkg-config(1) file​.

SEE ALSOsystemd(1), sd_id128_to_string(3), sd_id128_randomize(3), sd_id128_get_machine(3), printf(3), journalctl(1), sd-journal(7), pkg-config(1), machine-id(5)

NOTES 1. RFC 4122 ­https://tools.ietf.org/html/rfc4122 2. canonical representation ­https://en.wikipedia.org/wiki/Universally_unique_identifier#Format
0
Johanes Gumabo
Data Size   :   21,095 byte
man-sd_id128_is_null.3Build   :   2024-12-05, 20:55   :  
Visitor Screen   :   x
Visitor Counter ( page / site )   :   2 / 237,161
Visitor ID   :     :  
Visitor IP   :   3.138.67.56   :  
Visitor Provider   :   AMAZON-02   :  
Provider Position ( lat x lon )   :   39.962500 x -83.006100   :   x
Provider Accuracy Radius ( km )   :   1000   :  
Provider City   :   Columbus   :  
Provider Province   :   Ohio ,   :   ,
Provider Country   :   United States   :  
Provider Continent   :   North America   :  
Visitor Recorder   :   Version   :  
Visitor Recorder   :   Library   :  
Online Linux Manual Page   :   Version   :   Online Linux Manual Page - Fedora.40 - march=x86-64 - mtune=generic - 24.12.05
Online Linux Manual Page   :   Library   :   lib_c - 24.10.03 - march=x86-64 - mtune=generic - Fedora.40
Online Linux Manual Page   :   Library   :   lib_m - 24.10.03 - march=x86-64 - mtune=generic - Fedora.40
Data Base   :   Version   :   Online Linux Manual Page Database - 24.04.13 - march=x86-64 - mtune=generic - fedora-38
Data Base   :   Library   :   lib_c - 23.02.07 - march=x86-64 - mtune=generic - fedora.36

Very long time ago, I have the best tutor, Wenzel Svojanovsky . If someone knows the email address of Wenzel Svojanovsky , please send an email to johanes_gumabo@yahoo.co.id .
If error, please print screen and send to johanes_gumabo@yahoo.co.id
Under development. Support me via PayPal.