random_r(3)

الاسم
random_r, srandom_r, initstate_r, setstate_r - مولد أعداد عشوائية قابل لإعادة الدخول

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <stdlib.h>

int random_r(struct random_data *restrict buf,
             int32_t *restrict result);
int srandom_r(unsigned int seed, struct random_data *buf);

int initstate_r(unsigned int seed,
             char statebuf[restrict .statelen], size_t statelen,
             struct random_data *restrict buf);
int setstate_r(char *restrict statebuf,
             struct random_data *restrict buf);

    متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

random_r(), srandom_r(), initstate_r(), setstate_r():
    /* glibc >= 2.19: */ _DEFAULT_SOURCE
        || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

الوصف
هذه الدوال هي المكافئات القابلة لإعادة الدخول للدوال الموصوفة في random(3). وهي مناسبة للاستخدام في البرامج متعددة الخيوط حيث يحتاج كل خيط إلى الحصول على سلسلة مستقلة وقابلة للتكرار من الأعداد العشوائية.

دالة random_r() تشبه random(3)، باستثناء أنها بدلاً من استخدام معلومات الحالة المحفوظة في متغير عام، تستخدم معلومات الحالة في الوسيط المشار إليه بواسطة buf، والذي يجب أن يكون قد تمت تهيئته مسبقاً بواسطة initstate_r(). يُعاد العدد العشوائي المُولَّد في الوسيط result.

دالة srandom_r() تشبه srandom(3)، باستثناء أنها تهيئ البذرة لمولد الأعداد العشوائية الذي تُحفظ حالته في الكائن المشار إليه بواسطة buf، والذي يجب أن يكون قد تمت تهيئته مسبقاً بواسطة initstate_r()، بدلاً من البذرة المرتبطة بمتغير الحالة العام.

دالة initstate_r() تشبه initstate(3)، باستثناء أنها تهيئ الحالة في الكائن المشار إليه بواسطة buf، بدلاً من تهيئة متغير الحالة العام. قبل استدعاء هذه الدالة، يجب تهيئة الحقل buf.state إلى NULL. تسجل دالة initstate_r() مؤشراً إلى الوسيط statebuf داخل البنية المشار إليها بواسطة buf. وبالتالي، لا ينبغي إلغاء تخصيص statebuf طالما أن buf لا يزال قيد الاستخدام. (لذا، ينبغي عادةً تخصيص statebuf كمتغير ثابت، أو تخصيصه على الكومة باستخدام malloc(3) أو ما شابه ذلك.)

دالة setstate_r() تشبه setstate(3)، باستثناء أنها تُعدِّل الحالة في الكائن المشار إليه بواسطة buf، بدلاً من تعديل متغير الحالة العام. يجب أن يكون state قد تمت تهيئته أولاً باستخدام initstate_r() أو أن يكون نتيجة استدعاء سابق لـ setstate_r().

قيمة الإرجاع
تُعيد جميع هذه الدوال 0 عند النجاح. عند الخطأ، يُعاد -1، مع ضبط errno للإشارة إلى الخطأ.

الأخطاء

EINVAL
    تم تحديد مصفوفة حالة أقل من 8 بايت لـ initstate_r().

EINVAL
    كان الوسيط statebuf أو buf لـ setstate_r() NULL.

EINVAL
    كان الوسيط buf أو result لـ random_r() NULL.

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
random_r(), srandom_r(), initstate_r(), setstate_r() | سلامة الخيوط | MT-Safe race:buf

المعايير
GNU.

العلل
واجهة initstate_r() مُربكة. يبدو أن النوع random_data مُصمم ليكون معتماً، لكن التنفيذ يتطلب من المستخدم إما تهيئة الحقل buf.state إلى NULL أو تصفير البنية بأكملها قبل الاستدعاء.

انظر أيضًا
drand48(3), rand(3), random(3)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.