- unstable 4.31.0-1
| getgrent_r(3) | Library Functions Manual | getgrent_r(3) |
الاسم¶
getgrent_r, fgetgrent_r - الحصول على مدخل ملف المجموعة بشكل قابل لإعادة الدخول
المكتبة¶
مكتبة سي المعيارية (libc، -lc)
موجز¶
#include <grp.h>
int getgrent_r(size_t size;
struct group *restrict gbuf,
char buf[restrict size], size_t size,
struct group **restrict gbufp);
int fgetgrent_r(size_t size;
FILE *restrict stream, struct group *restrict gbuf,
char buf[restrict size], size_t size,
struct group **restrict gbufp);
getgrent_r():
_GNU_SOURCE
fgetgrent_r():
منذ glibc 2.19:
_DEFAULT_SOURCE
في glibc 2.19 وما قبله:
_SVID_SOURCE
الوصف¶
الدالتان getgrent_r() و fgetgrent_r() هما النسختان القابلتان لإعادة الدخول من getgrent(3) و fgetgrent(3). الأولى تقرأ مدخل المجموعة التالي من الدفق المُهيأ بواسطة setgrent(3). الثانية تقرأ مدخل المجموعة التالي من stream.
عُرف هيكل group في <grp.h> كالتالي:
struct group {
char *gr_name; /* اسم المجموعة */
char *gr_passwd; /* كلمة سر المجموعة */
gid_t gr_gid; /* معرف المجموعة */
char **gr_mem; /* مصفوفة منتهية بـ NULL من المؤشرات
إلى أسماء أعضاء المجموعة */
};
لمزيد من المعلومات حول حقول هذا الهيكل، راجع group(5).
الدوال غير القابلة لإعادة الدخول تُرجع مؤشرًا إلى تخزين ثابت، حيث يحتوي هذا التخزين الثابت على مؤشرات إضافية لاسم المجموعة، كلمة السر، والأعضاء. الدوال القابلة لإعادة الدخول الموصوفة هنا تُرجع كل ذلك في مخازن مؤقتة يُوفرها المُستدعي. أولاً هناك المخزن المؤقت gbuf الذي يمكنه حمل struct group. ثم المخزن المؤقت buf بحجم size الذي يمكنه حمل سلاسل محارف إضافية. نتيجة هذه الدوال، struct group المقروء من الدفق، تُخزن في المخزن المؤقت المُوفر *gbuf، ويُعاد مؤشر إلى هذا struct group في *gbufp.
قيمة الإرجاع¶
عند النجاح، تُرجع هذه الدوال 0 ويكون *gbufp مؤشرًا إلى struct group. عند الخطأ، تُرجع هذه الدوال قيمة خطأ ويكون *gbufp NULL.
الأخطاء¶
السمات¶
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
| الواجهة | السمة | القيمة |
| getgrent_r() | سلامة الخيوط | غير آمن للمسارات المتعددة (MT-Unsafe) سباق:grent locale |
| fgetgrent_r() | سلامة الخيوط | MT-Safe |
في الجدول أعلاه، grent في race:grent يُشير إلى أنه إذا استُخدمت أي من الدوال setgrent(3)، getgrent(3)، endgrent(3)، أو getgrent_r() بالتوازي في خيوط مختلفة من برنامج، فقد تحدث سباقات بيانات.
الإصدارات¶
أنظمة أخرى تستخدم النموذج الأولي
struct group *getgrent_r(struct group *grp, char buf[.size],
int size);
أو، بشكل أفضل،
int getgrent_r(struct group *grp, char buf[.size], int size,
FILE **gr_fp);
المعايير¶
GNU.
التاريخ¶
أُنجزت هذه الدوال بأسلوب يشبه نسخة POSIX من دوال مثل getpwnam_r(3).
ملاحظات¶
الدالة getgrent_r() ليست قابلة لإعادة الدخول حقًا لأنها تشارك موضع القراءة في الدفق مع جميع الخيوط الأخرى.
أمثلة¶
#define _GNU_SOURCE
#include <grp.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#define BUFLEN 4096
int
main(void)
{
struct group grp;
struct group *grpp;
char buf[BUFLEN];
int i;
setgrent();
for (;;) {
i = getgrent_r(&grp, buf, sizeof(buf), &grpp);
if (i)
break;
printf("%s (%jd):", grpp->gr_name, (intmax_t) grpp->gr_gid);
for (size_t j = 0; ; j++) {
if (grpp->gr_mem[j] == NULL)
break;
printf(" %s", grpp->gr_mem[j]);
}
printf("\n");
}
endgrent();
exit(EXIT_SUCCESS);
}
انظر أيضًا¶
fgetgrent(3), getgrent(3), getgrgid(3), getgrnam(3), putgrent(3), group(5)
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 14 فبراير 2026 | صفحات دليل لينكس 6.18 |