.\" -*- coding: UTF-8 -*- .\" Copyright 1993, Rickard E. Faith .\" Copyright 2008-2015, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH getgroups 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم getgroups, setgroups \- الحصول/تعيين قائمة معرفات المجموعات التكميلية .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBint getgroups(int \fP\fIsize\fP\fB, gid_t \fP\fIlist\fP\fB[_Nullable \fP\fIsize\fP\fB]);\fP .P \fB#include \fP .P \fBint setgroups(size_t \fP\fIsize\fP\fB, const gid_t \fP\fIlist\fP\fB[\fP\fIsize\fP\fB]);\fP .fi .P .RS -4 متطلبات ماكروات اختبار الميزات لـ glibc (انظر \fBfeature_test_macros\fP(7)): .RE .P \fBsetgroups\fP(): .nf منذ glibc 2.19: _DEFAULT_SOURCE glibc 2.19 وما قبله: _BSD_SOURCE .fi .SH الوصف ترجع \fBgetgroups\fP() معرفات المجموعات التكميلية للعملية المستدعية في \fIlist\fP. يجب تعيين الوسيط \fIsize\fP إلى أقصى عدد من العناصر التي يمكن تخزينها في المخزن المؤقت المشار إليه بواسطة \fIlist\fP. إذا كانت العملية المستدعية عضوًا في أكثر من \fIsize\fP مجموعة تكميلية، ينتج خطأ. .P من غير المحدد ما إذا كان معرف المجموعة الفعّال للعملية المستدعية مضمنًا في القائمة المرجعة. (وبالتالي، يجب على التطبيق أيضًا استدعاء \fBgetegid\fP(2) وإضافة أو إزالة القيمة الناتجة.) .P إذا كان \fIsize\fP صفرًا، لا يتم تعديل \fIlist\fP، ولكن يتم إرجاع العدد الإجمالي لمعرفات المجموعات التكميلية للعملية. يسمح هذا للمستدعي بتحديد حجم \fIlist\fP المخصص ديناميكيًا لاستخدامه في استدعاء لاحق لـ \fBgetgroups\fP(). .P تضبط \fBsetgroups\fP() معرفات المجموعات التكميلية للعملية المستدعية. الامتيازات المناسبة مطلوبة (انظر وصف خطأ \fBEPERM\fP أدناه). تحدد الوسيطة \fIsize\fP عدد معرفات المجموعات التكميلية في المخزن المؤقت المشار إليه بواسطة \fIlist\fP. يمكن لعملية إسقاط جميع مجموعاتها التكميلية بالاستدعاء: .P .in +4n .EX setgroups(0, (gid_t [0]){}); .EE .in .SH "قيمة الإرجاع" عند النجاح، ترجع \fBgetgroups\fP() عدد معرفات المجموعات التكميلية. عند الخطأ، يتم إرجاع \-1، ويتم تعيين \fIerrno\fP للإشارة إلى الخطأ. .P عند النجاح، ترجع \fBsetgroups\fP() 0. عند الخطأ، يتم إرجاع \-1، ويتم تعيين \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEFAULT\fP \fIlist\fP له عنوان غير صالح. .P يمكن أن تفشل \fBgetgroups\fP() بالإضافة إلى ذلك مع الخطأ التالي: .TP \fBEINVAL\fP \fIsize\fP أقل من عدد معرفات المجموعات التكميلية، ولكنه ليس صفرًا. .P يمكن أن تفشل \fBsetgroups\fP() بالإضافة إلى ذلك مع الأخطاء التالية: .TP \fBEINVAL\fP \fIsize\fP أكبر من \fBNGROUPS_MAX\fP (32 قبل Linux 2.6.4؛ 65536 منذ Linux 2.6.4). .TP \fBENOMEM\fP نفدت الذاكرة. .TP \fBEPERM\fP العملية المستدعية لديها امتياز غير كافٍ (المستدعي لا يملك القدرة \fBCAP_SETGID\fP في مساحة اسم المستخدم التي يقيم فيها). .TP \fBEPERM\fP (منذ Linux 3.19) استخدام \fBsetgroups\fP() ممنوع في مساحة اسم المستخدم هذه. انظر وصف \fI/proc/\fPpid\fI/setgroups\fP في \fBuser_namespaces\fP(7). .SH الإصدارات .SS "الاختلافات بين مكتبة C والنواة" على مستوى النواة، معرفات المستخدمين والمجموعات هي سمة لكل خيط. ومع ذلك، تتطلب POSIX أن تشترك جميع الخيوط في العملية في نفس بيانات الاعتماد. يعالج تطبيق الخيوط NPTL متطلبات POSIX من خلال توفير دوال غلاف لاستدعاءات النظام المختلفة التي تغير UIDs و GIDs للعملية. تستخدم دوال الغلاف هذه (بما في ذلك دالة \fBsetgroups\fP()) تقنية قائمة على الإشارات لضمان أنه عندما يغير خيط بيانات اعتماده، فإن جميع الخيوط الأخرى في العملية تغير أيضًا بيانات اعتمادها. للتفاصيل، انظر \fBnptl\fP(7). .SH المعايير .TP \fBgetgroups\fP() POSIX.1\-2024. .TP \fBsetgroups\fP() لا شيء. .SH التاريخ .TP \fBgetgroups\fP() 4.3BSD، SVr4، POSIX.1\-1988. .TP \fBsetgroups\fP() SVr4, 4.3BSD. نظرًا لأن \fBsetgroups\fP() يتطلب امتيازًا، فهو غير مشمول بـ POSIX.1. .P استدعاء النظام الأصلي Linux \fBgetgroups\fP() دعم فقط معرفات مجموعات 16 بت. لاحقًا، أضاف Linux 2.4 \fBgetgroups32\fP()، الذي يدعم معرفات 32 بت. تتعامل دالة الغلاف glibc \fBgetgroups\fP() بشفافية مع الاختلاف عبر إصدارات النواة. .SH ملاحظات يمكن أن تحتوي العملية على ما يصل إلى \fBNGROUPS_MAX\fP معرف مجموعة تكميلي بالإضافة إلى معرف المجموعة الفعّال. الثابت \fBNGROUPS_MAX\fP معرف في \fI\fP. مجموعة معرفات المجموعات التكميلية موروثة من العملية الأم، ومحفوظة عبر \fBexecve\fP(2). .P يمكن العثور على أقصى عدد لمعرفات المجموعات التكميلية في وقت التشغيل باستخدام \fBsysconf\fP(3): .P .in +4n .EX long ngroups_max; ngroups_max = sysconf(_SC_NGROUPS_MAX); .EE .in .P لا يمكن أن تكون القيمة القصوى المرجعة لـ \fBgetgroups\fP() أكبر من واحد زائد هذه القيمة. منذ Linux 2.6.4، يتم أيضًا كشف أقصى عدد لمعرفات المجموعات التكميلية عبر الملف المخصص للقراءة فقط الخاص بـ Linux، \fI/proc/sys/kernel/ngroups_max\fP. .SH أمثلة .\" SRC BEGIN (agetgroups.c) .EX #include #include #include #include #include #include #include \& #define MALLOC(n, T) ((T *) reallocarray(NULL, n, sizeof(T))) \& static gid_t *agetgroups(size_t *ngids); \& int main(void) { gid_t *gids; size_t n; \& gids = agetgroups(&n); if (gids == NULL) err(EXIT_FAILURE, "agetgroups"); \& if (n != 0) { printf("%jd", (intmax_t) gids[0]); for (size_t i = 1; i < n; i++) printf(" %jd", (intmax_t) gids[i]); } puts(""); \& free(gids); exit(EXIT_SUCCESS); } \& static gid_t * agetgroups(size_t *ngids) { int n; gid_t *gids; \& n = getgroups(0, NULL); if (n == \-1) return NULL; \& gids = MALLOC(n, gid_t); if (gids == NULL) return NULL; \& n = getgroups(n, gids); if (n == \-1) { free(gids); return NULL; } \& *ngids = n; return gids; } .EE .\" SRC END .SH "انظر أيضًا" \fBgetgid\fP(2), \fBsetgid\fP(2), \fBgetgrouplist\fP(3), \fBgroup_member\fP(3), \fBinitgroups\fP(3), \fBcapabilities\fP(7), \fBcredentials\fP(7) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .