getpwent_r(3)

الاسم
getpwent_r, fgetpwent_r - الحصول على مدخل ملف كلمات السر بشكل قابل لإعادة الدخول

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

موجز
#include <pwd.h>

int getpwent_r(size_t size;
               struct passwd *restrict pwbuf,
               char buf[restrict size], size_t size,
               struct passwd **restrict pwbufp);
int fgetpwent_r(size_t size;
               FILE *restrict stream, struct passwd *restrict pwbuf,
               char buf[restrict size], size_t size,
               struct passwd **restrict pwbufp);

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

getpwent_r()،
    منذ glibc 2.19:
        _DEFAULT_SOURCE
    glibc 2.19 وما قبله:
        _BSD_SOURCE || _SVID_SOURCE

fgetpwent_r()،
    منذ glibc 2.19:
        _DEFAULT_SOURCE
    في glibc 2.19 وما قبله:
        _SVID_SOURCE

الوصف
الدالتان getpwent_r() و fgetpwent_r() هما النسختان القابلتان لإعادة الدخول من getpwent(3) و fgetpwent(3). الأولى تقرأ مدخل passwd التالي من الدفق المُهيأ بواسطة setpwent(3). الثانية تقرأ مدخل passwd التالي من stream.

عُرف هيكل passwd في <pwd.h> كالتالي:

    struct passwd {
        char    *pw_name;      /* اسم المستخدم */
        char    *pw_passwd;    /* كلمة سر المستخدم */
        uid_t    pw_uid;       /* معرف المستخدم */
        gid_t    pw_gid;       /* معرف المجموعة */
        char    *pw_gecos;     /* معلومات المستخدم */
        char    *pw_dir;       /* الدليل الرئيسي */
        char    *pw_shell;     /* برنامج الصدفة */
    };

لمزيد من المعلومات حول حقول هذا الهيكل، راجع passwd(5).

الدوال غير القابلة لإعادة الدخول تُرجع مؤشرًا إلى تخزين ثابت، حيث يحتوي هذا التخزين الثابت على مؤشرات أخرى لاسم المستخدم، كلمة السر، حقل gecos، الدليل الرئيسي والصدفة. الدوال القابلة لإعادة الدخول الموصوفة هنا تُرجع كل ذلك في مخازن مؤقتة يقدمها المستدعي. أولاً هناك المخزن المؤقت pwbuf الذي يمكنه حمل struct passwd. ثم المخزن المؤقت buf بحجم size الذي يمكنه حمل سلاسل محارف إضافية. نتيجة هذه الدوال، struct passwd المقروء من الدفق، تُخزن في المخزن المؤقت المُقدم *pwbuf، ويُعاد مؤشر إلى هذا struct passwd في *pwbufp.

قيمة الإرجاع
عند النجاح، تُرجع هذه الدوال 0 ويكون *pwbufp مؤشرًا إلى struct passwd. عند الخطأ، تُرجع هذه الدوال قيمة خطأ ويكون *pwbufp NULL.

الأخطاء

ENOENT
    لا يوجد مزيد من المدخلات.

ERANGE
    مساحة المخزن المؤقت (buffer) المزودة غير كافية. حاول ثانية بمخزن أكبر.

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
getpwent_r() | سلامة الخيوط | غير آمن للمسارات المتعددة (MT-Unsafe) سباق:pwent locale
fgetpwent_r() | سلامة الخيوط | MT-Safe

في الجدول أعلاه، pwent في race:pwent يعني أنه إذا استُخدمت أي من الدوال setpwent()، getpwent()، endpwent()، أو getpwent_r() بالتوازي في خيوط مختلفة من برنامج، فقد تحدث سباقات بيانات.

الإصدارات
أنظمة أخرى تستخدم النموذج الأولي

    struct passwd *
    getpwent_r(struct passwd *pwd, char buf[.size], int size);

أو، بشكل أفضل،

    int
    getpwent_r(struct passwd *pwd, char buf[.size], int size,
               FILE **pw_fp);

المعايير
لا شيء.

التاريخ
أُنجزت هذه الدوال بأسلوب يشبه نسخة POSIX من دوال مثل getpwnam_r(3).

ملاحظات
الدالة getpwent_r() ليست قابلة لإعادة الدخول حقًا لأنها تشارك موضع القراءة في الدفق مع جميع الخيوط الأخرى.

أمثلة
    #define _GNU_SOURCE
    #include <pwd.h>
    #include <stdint.h>
    #include <stdio.h>
    #include <stdlib.h>

    #define BUFLEN 4096

    int
    main(void)
    {
        struct passwd pw;
        struct passwd *pwp;
        char buf[BUFLEN];
        int i;

        setpwent();
        for (;;) {
            i = getpwent_r(&pw, buf, sizeof(buf), &pwp);
            if (i)
                break;
            printf("%s (%jd)\tHOME %s\tSHELL %s\n", pwp->pw_name,
                   (intmax_t) pwp->pw_uid, pwp->pw_dir, pwp->pw_shell);
        }
        endpwent();
        exit(EXIT_SUCCESS);
    }

انظر أيضًا
fgetpwent(3)، getpw(3)، getpwent(3)، getpwnam(3)، getpwuid(3)، putpwent(3)، passwd(5)

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

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

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