UUID_GENERATE(3) دليل المبرمج 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 الخاص بشبكة الإيثرنت المحلية (إن وُجد)، وبيانات عشوائية وُلدت باستخدام موّلد أرقام شبه عشوائي.

تفرض الدالة uuid_generate_random(3) استخدام تنسيق UUID العشوائي بالكامل، حتى لو لم يتوفر مولد أرقام عشوائية عالي الجودة، وفي هذه الحالة سيُستبدل بمولد أرقام عشوائية زائف. لاحظ أن استخدام مولد زائف قد يضر بفرادة معرفات UUID المولدة بهذه الطريقة.

تفرض الدالة uuid_generate_time(3) استخدام الخوارزمية البديلة التي تستخدم الوقت الحالي وعنوان MAC الخاص بشبكة الإيثرنت المحلية (إن توفر). كانت هذه الخوارزمية هي المبدئية المستخدمة لتوليد معرفات UUID، ولكن بسبب استخدام عنوان MAC، فقد تسرب معلومات حول وقت ومكان توليد UUID. يمكن أن يسبب هذا مشاكل في الخصوصية في بعض التطبيقات، لذا فإن الدالة uuid_generate() لا تستخدم هذه الخوارزمية إلا إذا لم يتوفر مصدر عشوائية عالي الجودة. ولضمان فرادة معرفات UUID المولدة بواسطة عمليات تعمل بالتزامن، تستخدم مكتبة uuid عداد حالة ساعة عالمي (إذا كانت للعملية صلاحيات الوصول الحصري لهذا الملف) و/أو عفريت uuidd(8)، إذا كان يعمل بالفعل أو يمكن تشغيله بواسطة العملية (إذا كان مثبتاً وللعملية صلاحيات كافية لتشغيله). إذا لم يمكن استخدام أي من آليتي التزامن هاتين، فمن الممكن نظرياً أن تحصل عمليتان تعملان بالتزامن على نفس الـ UUID. لمعرفة ما إذا كان الـ UUID قد وُلد بطريقة آمنة، استخدم uuid_generate_time_safe(3).

الدالة uuid_generate_time_safe(3) مشابهة لـ uuid_generate_time(3)، باستثناء أنها تعيد قيمة تشير إلى ما إذا كانت أي من آليات التزامن (انظر أعلاه) قد استُخدمت.

يبلغ طول المعرّف UUID 16 بايت (128 بت)، مما يعطي ما يقارب 3.4x10^38 قيمة فريدة (يوجد حوالي 10^80 جسيم أولي في الكون وفقًا لكتاب Cosmos لكارل ساغان). يمكن منطقيًا اعتبار المعرّف الجديد فريدًا بين جميع المعرّفات المنشأة على الحاسوب المحلي، وبين المعرّفات المنشأة على أنظمة أخرى في الماضي والمستقبل.

تولد الدالتان uuid_generate_md5(3) و uuid_generate_sha1(3) معرف UUID مبني على تجزئة MD5 و SHA1 (متوقع) بناءً على UUID معروف يوفر مساحة الأسماء وسلسلة ثنائية عشوائية. تتوافق معرفات UUID مع الإصدارين V3 و V5 من UUID حسب RFC-4122 https://tools.ietf.org/html/rfc4122.

قيمة الإرجاع

يُعاد الـ UUID المنشأ حديثاً في موقع الذاكرة الذي يشير إليه out. تعيد uuid_generate_time_safe(3) صفراً إذا وُلد الـ UUID بطريقة آمنة، و ‎-1‎ خلاف ذلك.

متوافق مع

تولد هذه المكتبة معرفات UUID متوافقة مع OSF DCE 1.1، ومعرفات 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. يمكن تنزيلها من أرشيف نواة لينكس https://www.kernel.org/pub/linux/utils/util-linux/.

2026-05-18 util-linux 2.42.1