UUID_GENERATE(3) Podrecznik programisty UUID_GENERATE(3) NAZWA uuid_generate, uuid_generate_random, uuid_generate_time, uuid_generate_time_safe - tworzy nowa, unikalna wartosc UUID SKLADNIA #include void uuid_generate(uuid_t out); void uuid_generate_random(uuid_t out); void uuid_generate_time(uuid_t out); int uuid_generate_time_safe(uuid_t out); void uuid_generate_md5(uuid_t out, const uuid_t ns, const char *name, size_t len); void uuid_generate_sha1(uuid_t out, const uuid_t ns, const char *name, size_t len); OPIS Funkcja uuid_generate() tworzy nowy uniwersalnie unikalny identyfikator (UUID). Wartosc uuid bedzie wygenerowana na podstawie losowosci o wysokiej jakosci pozyskanej z getrandom(2), /dev/urandom lub /dev/random, jesli sa one dostepne. Jesli sa niedostepne, uuid_generate() uzyje alternatywnego algorytmu, ktory korzysta z biezacego czasu, lokalnego adresu ethernetowego MAC (jesli jest dostepny) oraz losowych danych wygenerowanych przez generator pseudolosowy. Funkcja uuid_generate_random(3) wymusza uzycie w pelni losowego formatu UUID, nawet jesli generator liczb losowych o wysokiej jakosci nie jest dostepny; wowczas zostanie zastapiony generatorem pseudolosowym. Prosze zauwazyc, ze korzystanie z generatora pseudolosowego moze naruszyc unikalnosc wygenerowanych w ten sposob UUID-ow. Funkcja uuid_generate_time() wymusza uzycie alternatywnego algorytmu, ktory korzysta z biezacego czasu oraz lokalnego adresu ethernetowego MAC (jesli jest dostepny). Algorytm ten byl niegdys domyslnym uzywanym do generowania UUID-ow, lecz z powodu uzywania adresu MAC ethernetu, moze powodowac wyciek informacji na temat czasu i miejsca wygenerowania UUID-u. W pewnych zastosowaniach moze to byc problematyczne pod wzgledem prywatnosci, dlatego funkcja uuid_generate() korzysta z tego algorytmu tylko, jesli zrodlo losowosci o wysokiej jakosci jest niedostepne. Aby zagwarantowac unikalnosc UUID-ow generowanych przez rownolegle dzialajace procesy, biblioteka uuid korzysta z globalnego licznika stanu zegara (jesli proces ma uprawnienia do uzyskania wylacznego dostepu do tego pliku) i/lub demona uuidd(8), jesli taki juz dziala lub moze byc przywolany przez proces (jesli jest zainstalowany, a proces ma wystarczajace uprawnienia do jego uruchomienia). Jesli nie da sie wykorzystac zadnego z opisanych dwoch mechanizmow synchronizacji, teoretycznie moze sie zdarzyc, ze dwa rownolegle dzialajace procesy uzyskaja ten sam UUID. Aby sprawdzic, czy UUID zostal utworzony w bezpieczny sposob, prosze uzyc uuid_generate_time_safe(3). Funkcja uuid_generate_time_safe(3) jest podobna do uuid_generate_time(3) z ta roznica, ze zwraca wartosc wskazujaca, czy uzyto ktoregos z mechanizmow synchronizacyjnych (zob. wyzej). UUID jest wartoscia 16-bajtowa (128 bitowa), co daje okolo 3.4x10^38 unikalnych wartosci (zgodnie z ksiazka Kosmos Carla Sagana we wszechswiecie jest okolo 10^80 czastek elementarnych). Nowy UUID mozna zatem rozsadnie uwazac za unikalny posrod wszystkich UUID-ow utworzonych w lokalnym systemie oraz posrod UUID-ow utworzonych w innych systemach w przeszlosci i w przyszlosci. Funkcje uuid_generate_md5(3) i uuid_generate_sha1(3) tworza (przewidywalne) UUID-y korzystajace ze skrotow MD5 i SHA1, uzywajac znanego, zdefiniowanego UUID-u wskazujacego przestrzen nazw i dowolnego lancucha binarnego. UUID-y sa zgodne z UUID-ami V3 i V5 z RFC-4122 . WARTOSC ZWRACANA Nowo tworzone UUID-y sa zwracane do polozenia pamieci, na ktore wskazuje out. uuid_generate_time_safe(3) zwraca zero, jesli UUID wygenerowano w bezpieczny sposob lub -1 w innym przypadku. ZGODNE Z Biblioteka tworzy UUID-y kompatybilne z OSF DCE 1.1, oraz UUID-y V3 i V5 powstale w oparciu o skrot, kompatybilne z RFC-4122 . AUTORZY Theodore Y. Ts'o ZOBACZ TAKZE uuidgen(1), uuid(3), uuid_clear(3), uuid_compare(3), uuid_copy(3), uuid_is_null(3), uuid_parse(3), uuid_time(3), uuid_unparse(3), uuidd(8) ZGLASZANIE BLEDOW Problemy nalezy zglaszac w systemie sledzenia bledow . DOSTEPNOSC Biblioteka libuuid jest czescia pakietu util-linux od wersji 2.15.1. Mozna go pobrac ze strony Archiwum jadra Linux . util-linux 2.42.3 2026-09-02 UUID_GENERATE(3)