uuid_generate, uuid_generate_random, uuid_generate_time, uuid_generate_time_safe
—
створення
унікального
значення UUID
#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);
Функція
uuid_generate()
створює
універсально
унікальний
ідентифікатор
(UUID). UUID буде
створено
на основі
високоякісної
псевдовипадковості
від
getrandom(2),
/dev/urandom_
або _/dev/random, якщо
такі
доступні.
Якщо ці
джерела
недоступні,
uuid_generate()
використає
альтернативний
алгоритм,
який
використовує
поточний
час,
локальну
MAC-адресу ethernet
(якщо
доступна)
та
створені
псевдовипадкові
дані.
Використання
функції
uuid_generate_random()
призводить
до
примусового
використання
повністю
випадкового
формату UUID,
навіть
якщо є
недоступним
високоякісний
засіб
породження
псевдовипадкових
чисел (буде
використано
звичайний
породжувач
псевдовипадкових
чисел).
Зауважте,
що
використання
звичайного
породжувача
може
позначитися
на
унікальності
створених
цією
функцією UUID.
Функція
uuid_generate_time()
примушує
програму
до
використання
альтернативного
алгоритму,
у якому
використано
поточний
час і
локальну
MAC-адресу ethernet
(якщо така
доступна).
Цей
алгоритм,
який є
типовим
для
створення UUID,
але через
використання
MAC-адреси ethernet,
він може
стати
джерелом
витоку
даних щодо
того, коли і
де було
створено UUID.
Це може
призвести
до проблем
із
конфіденційністю
у деяких
програмах,
тому
функція
uuid_generate()
використовує
цей
алгоритм,
лише якщо є
недоступним
високоякісне
джерело
випадкових
даних. Для
гарантування
унікальності
UUID, які
створено
паралельними
процесами,
бібліотека
uuid
використовує
загальний
лічильник
стану
годинника
(якщо
процес має
права
доступу
для
отримання
виключного
доступу до
цього
файла) і/або
фонову
службу
uuidd(8),
якщо його
вже
запущено
або його
може бути
породжено
процесом
(якщо
фонову
службу
встановлено
і процес
має
достатні
права
доступу
для її
запуску).
Якщо не
можна
скористатися
жодним з
цих двох
механізмів
синхронізації,
теоретично
можливо, що
два
паралельно
запущені
процеси
дадуть
однакові UUID.
Щоб
забезпечити
безпечне
створення UUID,
користуйтеся
*uuid
generate_timesafe*.
Функція
uuid_generate_time_safe() є
подібною
до
uuid_generate_time(), але
вона
повертає
значення,
яке
позначає,
чи було
використано
якийсь
механізм
синхронізації
(див. вище).
UUID
складається
з 16 байтів (128
бітів), що
дає
приблизно
3,4x10^38
унікальних
значень (у
Всесвіті
приблизно 10^80
елементарних
часток, як
це
розраховано
у книзі
Карла
Сагана
Космос). UUID
можна
вважати
унікальним
серед усіх
UUID, які
створено у
локальній
системі, та
серед UUID, які
створено в
інших
системах у
минулому і
буде
створено у
майбутньому.
Функції
uuid_generate_md5() і *uuid
generatesha1*()
породжують
хешовані
(передбачувані)
MD5 і SHA1 UUID на
основі
добре
відомого UUID,
що надає
простір
назв і
довільний
двійковий
рядок. UUID
відповідають
версіям V3 і V5 UUID
за
RFC-4122 <
https://tools.ietf.org/html/rfc4122>.
Новостворений
UUID буде
повернуто
до місця у
пам'яті, на
яке вказує
out.
uuid_generate_time_safe()
повертає
нуль, якщо UUID
було
створено у
безпечний
спосіб, -1 — у
інших
випадках.
Ця
бібліотека
створює UUID,
які є
сумісними
з DCE 1.1 OSF і
засновані
на хешах UUID V3 і V5
і сумісні з
RFC-4122 <
https://tools.ietf.org/html/rfc4122>.
Theodore Y. Ts’o
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)
Для
звітування
про вади
використовуйте
систему
стеження
помилками
на
<
https://github.com/util-linux/util-linux/issues>.
libuuid є
частиною
пакунка util-linux,
починаючи
з версії 2.15.1.
Пакунок
можна
отримати з
Linux Kernel Archive
<
https://www.kernel.org/pub/linux/utils/util-linux/>.
Український
переклад
цієї
сторінки
посібника
виконано Yuri
Chornoivan <
[email protected]>
Цей
переклад є
безкоштовною
документацією;
будь ласка,
ознайомтеся
з умовами
GNU
General Public License Version 3 НЕ
НАДАЄТЬСЯ
ЖОДНИХ
ГАРАНТІЙ.
Якщо ви
знайшли
помилки у
перекладі
цієї
сторінки
підручника,
будь ласка,
надішліть
електронний
лист до
списку
листування
перекладачів:
[email protected]