UUID_GENERATE(3)

НАЗВА
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, користуйтеся *uuidgenerate_timesafe*.

Функція uuid_generate_time_safe() є подібною до uuid_generate_time(), але вона повертає значення, яке позначає, чи було використано якийсь механізм синхронізації (див. вище).

UUID складається з 16 байтів (128 бітів), що дає приблизно 3,4x10^38 унікальних значень (у Всесвіті приблизно 10^80 елементарних часток, як це розраховано у книзі Карла Сагана Космос). UUID можна вважати унікальним серед усіх UUID, які створено у локальній системі, та серед UUID, які створено в інших системах у минулому і буде створено у майбутньому.

Функції uuid_generate_md5() і *uuidgeneratesha1*() породжують хешовані (передбачувані) MD5 і SHA1 UUID на основі добре відомого UUID, що надає простір назв і довільний двійковий рядок. UUID відповідають версіям V3 і V5 UUID за

ПОВЕРНУТЕ ЗНАЧЕННЯ

Новостворений UUID буде повернуто до місця у пам'яті, на яке вказує out. uuid_generate_time_safe() повертає нуль, якщо UUID було створено у безпечний спосіб, -1 — у інших випадках.

ВІДПОВІДНІСТЬ

Ця бібліотека створює UUID, які є сумісними з DCE 1.1 OSF і засновані на хешах UUID V3 і V5 і сумісні з

АВТОРИ

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)

ЗВІТИ ПРО ВАДИ

Для звітування про вади використовуйте систему стеження помилками на

ДОСТУПНІСТЬ

libuuid є частиною пакунка util-linux, починаючи з версії 2.15.1. Пакунок можна отримати з

ПЕРЕКЛАД
Український переклад цієї сторінки посібника виконано Yuri Chornoivan <yurchor@ukr.net>

Цей переклад є безкоштовною документацією; будь ласка, ознайомтеся з умовами GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html). НЕ НАДАЄТЬСЯ ЖОДНИХ ГАРАНТІЙ.

Якщо ви знайшли помилки у перекладі цієї сторінки підручника, будь ласка, надішліть електронний лист до списку листування перекладачів: trans-uk@lists.fedoraproject.org.