| UUID_GENERATE(3) | Podręcznik programisty | UUID_GENERATE(3) |
NAZWA
uuid_generate, uuid_generate_random, uuid_generate_time, uuid_generate_time_safe - tworzy nową, unikalną wartość UUID
SKŁADNIA
#include <uuid.h>
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). Wartość uuid będzie wygenerowana na podstawie losowości o wysokiej jakości pozyskanej z getrandom(2), /dev/urandom lub /dev/random, jeśli są one dostępne. Jeśli są niedostępne, uuid_generate() użyje alternatywnego algorytmu, który korzysta z bieżącego czasu, lokalnego adresu ethernetowego MAC (jeśli jest dostępny) oraz losowych danych wygenerowanych przez generator pseudolosowy.
Funkcja uuid_generate_random(3) wymusza użycie w pełni losowego formatu UUID, nawet jeśli generator liczb losowych o wysokiej jakości nie jest dostępny; wówczas zostanie zastąpiony generatorem pseudolosowym. Proszę zauważyć, że korzystanie z generatora pseudolosowego może naruszyć unikalność wygenerowanych w ten sposób UUID-ów.
Funkcja uuid_generate_time() wymusza użycie alternatywnego algorytmu, który korzysta z bieżącego czasu oraz lokalnego adresu ethernetowego MAC (jeśli jest dostępny). Algorytm ten był niegdyś domyślnym używanym do generowania UUID-ów, lecz z powodu używania adresu MAC ethernetu, może powodować wyciek informacji na temat czasu i miejsca wygenerowania UUID-u. W pewnych zastosowaniach może to być problematyczne pod względem prywatności, dlatego funkcja uuid_generate() korzysta z tego algorytmu tylko, jeśli źródło losowości o wysokiej jakości jest niedostępne. Aby zagwarantować unikalność UUID-ów generowanych przez równolegle działające procesy, biblioteka uuid korzysta z globalnego licznika stanu zegara (jeśli proces ma uprawnienia do uzyskania wyłącznego dostępu do tego pliku) i/lub demona uuidd(8), jeśli taki już działa lub może być przywołany przez proces (jeśli jest zainstalowany, a proces ma wystarczające uprawnienia do jego uruchomienia). Jeśli nie da się wykorzystać żadnego z opisanych dwóch mechanizmów synchronizacji, teoretycznie może się zdarzyć, że dwa równolegle działające procesy uzyskają ten sam UUID. Aby sprawdzić, czy UUID został utworzony w bezpieczny sposób, proszę użyć uuid_generate_time_safe(3).
Funkcja uuid_generate_time_safe(3) jest podobna do uuid_generate_time(3) z tą różnicą, że zwraca wartość wskazującą, czy użyto któregoś z mechanizmów synchronizacyjnych (zob. wyżej).
UUID jest wartością 16-bajtową (128 bitową), co daje około 3.4x10^38 unikalnych wartości (zgodnie z książką Kosmos Carla Sagana we wszechświecie jest około 10^80 cząstek elementarnych). Nowy UUID można zatem rozsądnie uważać za unikalny pośród wszystkich UUID-ów utworzonych w lokalnym systemie oraz pośród UUID-ów utworzonych w innych systemach w przeszłości i w przyszłości.
Funkcje uuid_generate_md5(3) i uuid_generate_sha1(3) tworzą (przewidywalne) UUID-y korzystające ze skrótów MD5 i SHA1, używając znanego, zdefiniowanego UUID-u wskazującego przestrzeń nazw i dowolnego łańcucha binarnego. UUID-y są zgodne z UUID-ami V3 i V5 z RFC-4122 https://tools.ietf.org/html/rfc4122.
WARTOŚĆ ZWRACANA
Nowo tworzone UUID-y są zwracane do położenia pamięci, na które wskazuje out. uuid_generate_time_safe(3) zwraca zero, jeśli UUID wygenerowano w bezpieczny sposób lub -1 w innym przypadku.
ZGODNE Z
Biblioteka tworzy UUID-y kompatybilne z OSF DCE 1.1, oraz UUID-y V3 i V5 powstałe w oparciu o skrót, kompatybilne z RFC-4122 https://tools.ietf.org/html/rfc4122.
AUTORZY
Theodore Y. Ts’o
ZOBACZ TAKŻE
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)
ZGŁASZANIE BŁĘDÓW
Problemy należy zgłaszać w systemie śledzenia błędów https://github.com/util-linux/util-linux/issues.
DOSTĘPNOŚĆ
Biblioteka libuuid jest częścią pakietu util-linux od wersji 2.15.1. Można go pobrać ze strony Archiwum jądra Linux https://www.kernel.org/pub/linux/utils/util-linux/.
| 2026-09-02 | util-linux 2.42.3 |