.\" -*- coding: UTF-8 -*- .\" Copyright 1993, The Regents of the University of California. .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: BSD-3-Clause .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH القائمة 3 "17 مايو 2025" "صفحات دليل لينكس 6.18" .SH الاسم .\"LIST_FOREACH_FROM, .\"LIST_FOREACH_SAFE, .\"LIST_FOREACH_FROM_SAFE, .\"LIST_PREV, .\"LIST_SWAP LIST_EMPTY, LIST_ENTRY, LIST_FIRST, LIST_FOREACH, LIST_HEAD, LIST_HEAD_INITIALIZER, LIST_INIT, LIST_INSERT_AFTER, LIST_INSERT_BEFORE, LIST_INSERT_HEAD, LIST_NEXT, LIST_REMOVE \- تنفيذ قائمة مرتبطة مزدوجة .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBLIST_ENTRY(TYPE);\fP .P \fBLIST_HEAD(HEADNAME, TYPE);\fP \fBLIST_HEAD LIST_HEAD_INITIALIZER(LIST_HEAD \fP\fIhead\fP\fB);\fP \fBvoid LIST_INIT(LIST_HEAD *\fP\fIhead\fP\fB);\fP .P \fBint LIST_EMPTY(LIST_HEAD *\fP\fIhead\fP\fB);\fP .P \fBvoid LIST_INSERT_HEAD(LIST_HEAD *\fP\fIhead\fP\fB,\fP \fB struct TYPE *\fP\fIelm\fP\fB, LIST_ENTRY \fP\fINAME\fP\fB);\fP \fBvoid LIST_INSERT_BEFORE(struct TYPE *\fP\fIlistelm\fP\fB,\fP \fB struct TYPE *\fP\fIelm\fP\fB, LIST_ENTRY \fP\fINAME\fP\fB);\fP \fBvoid LIST_INSERT_AFTER(struct TYPE *\fP\fIlistelm\fP\fB,\fP \fB struct TYPE *\fP\fIelm\fP\fB, LIST_ENTRY \fP\fINAME\fP\fB);\fP .P .\" .BI "struct TYPE *LIST_PREV(struct TYPE *" elm ", LIST_HEAD *" head , .\" .BI " struct TYPE, LIST_ENTRY " NAME ); \fBstruct TYPE *LIST_FIRST(LIST_HEAD *\fP\fIhead\fP\fB);\fP \fBstruct TYPE *LIST_NEXT(struct TYPE *\fP\fIelm\fP\fB, LIST_ENTRY \fP\fINAME\fP\fB);\fP .P .\" .BI "LIST_FOREACH_FROM(struct TYPE *" var ", LIST_HEAD *" head ", LIST_ENTRY " NAME ); .\" .P .\" .BI "LIST_FOREACH_SAFE(struct TYPE *" var ", LIST_HEAD *" head , .\" .BI " LIST_ENTRY " NAME ", struct TYPE *" temp_var ); .\" .BI "LIST_FOREACH_FROM_SAFE(struct TYPE *" var ", LIST_HEAD *" head , .\" .BI " LIST_ENTRY " NAME ", struct TYPE *" temp_var ); \fBLIST_FOREACH(struct TYPE *\fP\fIvar\fP\fB, LIST_HEAD *\fP\fIhead\fP\fB, LIST_ENTRY \fP\fINAME\fP\fB);\fP .P .\" .P .\" .BI "void LIST_SWAP(LIST_HEAD *" head1 ", LIST_HEAD *" head2 , .\" .BI " struct TYPE, LIST_ENTRY " NAME ); \fBvoid LIST_REMOVE(struct TYPE *\fP\fIelm\fP\fB, LIST_ENTRY \fP\fINAME\fP\fB);\fP .fi .SH الوصف تُعرِّف هذه الكليّات وتُشغّل القوائم المرتبطة المزدوجة. .P في تعريفات الكليّات، \fITYPE\fP هو اسم هيكل مُعرَّف من المستخدم، يجب أن يحتوي على حقل من نوع \fILIST_ENTRY\fP، يُسمى \fINAME\fP. المعامل \fIHEADNAME\fP هو اسم هيكل مُعرَّف من المستخدم يجب التصريح به باستخدام الكليّة \fBLIST_HEAD\fP(). .SS الإنشاء ترأس القائمة هيكل مُعرَّف بواسطة الكليّة \fBLIST_HEAD\fP(). يحتوي هذا الهيكل على مؤشر واحد للعنصر الأول في القائمة. العناصر مرتبطة مزدوجًا بحيث يمكن إزالة أي عنصر عشوائي دون اجتياز القائمة. يمكن إضافة عناصر جديدة إلى القائمة بعد عنصر موجود، أو قبل عنصر موجود، أو في رأس القائمة. يُصرَّح عن هيكل \fILIST_HEAD\fP كالتالي: .P .in +4 .EX LIST_HEAD(HEADNAME, TYPE) head; .EE .in .P حيث \fIstruct HEADNAME\fP هي البنية المراد تعريفها، و \fIstruct TYPE\fP هو نوع العناصر المراد ربطها في القائمة. يمكن لاحقًا التصريح عن مؤشر لرأس القائمة كـ: .P .in +4 .EX struct HEADNAME *headp; .EE .in .P (الاسمان \fIhead\fP و \fIheadp\fP يمكن للمستخدم اختيارهما.) .P تُصرِّح \fBLIST_ENTRY\fP() عن هيكل يربط العناصر في القائمة. .P تُقيِّم \fBLIST_HEAD_INITIALIZER\fP() إلى مُهيِّئ للقائمة \fIhead\fP. .P تهيِّئ \fBLIST_INIT\fP() القائمة المشار إليها بواسطة \fIhead\fP. .P تُقيِّم \fBLIST_EMPTY\fP() إلى صحيح إذا لم تكن هناك عناصر في القائمة. .SS إدراج تُدرج \fBLIST_INSERT_HEAD\fP() العنصر الجديد \fIelm\fP في رأس القائمة. .P تُدرج \fBLIST_INSERT_BEFORE\fP() العنصر الجديد \fIelm\fP قبل العنصر \fIlistelm\fP. .P تُدرج \fBLIST_INSERT_AFTER\fP() العنصر الجديد \fIelm\fP بعد العنصر \fIlistelm\fP. .SS اجتياز .\" .P .\" .BR LIST_PREV () .\" returns the previous element in the list, or NULL if this is the first. .\" List .\" .I head .\" must contain element .\" .IR elm . تُرجع \fBLIST_FIRST\fP() العنصر الأول في القائمة، أو NULL إذا كانت القائمة فارغة. .P تُعيد \fBLIST_NEXT\fP() العنصر التالي في القائمة، أو NULL إذا كان هذا هو الأخير. .P .\" .P .\" .BR LIST_FOREACH_FROM () .\" behaves identically to .\" .BR LIST_FOREACH () .\" when .\" .I var .\" is NULL, else it treats .\" .I var .\" as a previously found LIST element and begins the loop at .\" .I var .\" instead of the first element in the LIST referenced by .\" .IR head . .\" .P .\" .BR LIST_FOREACH_SAFE () .\" traverses the list referenced by .\" .I head .\" in the forward direction, assigning each element in turn to .\" .IR var . .\" However, unlike .\" .BR LIST_FOREACH () .\" here it is permitted to both remove .\" .I var .\" as well as free it from within the loop safely without interfering with the .\" traversal. .\" .P .\" .BR LIST_FOREACH_FROM_SAFE () .\" behaves identically to .\" .BR LIST_FOREACH_SAFE () .\" when .\" .I var .\" is NULL, else it treats .\" .I var .\" as a previously found LIST element and begins the loop at .\" .I var .\" instead of the first element in the LIST referenced by .\" .IR head . تتجول \fBLIST_FOREACH\fP() عبر القائمة المُشار إليها بواسطة \fIhead\fP في الاتجاه الأمامي، مُسندة كل عنصر بدوره إلى \fIvar\fP. .SS إزالة .\" .SS Other features .\" .BR LIST_SWAP () .\" swaps the contents of .\" .I head1 .\" and .\" .IR head2 . تُزيل \fBLIST_REMOVE\fP() العنصر \fIelm\fP من القائمة. .SH "قيمة الإرجاع" تُعيد \fBLIST_EMPTY\fP() قيمة غير صفرية إذا كانت القائمة فارغة، وصفرًا إذا كانت القائمة تحتوي على إدخال واحد على الأقل. .P تُعيد \fBLIST_FIRST\fP() و \fBLIST_NEXT\fP() مؤشرًا إلى أول بنية \fITYPE\fP أو التالية، على التوالي. .P تُعيد \fBLIST_HEAD_INITIALIZER\fP() مُهيئًا يمكن إسناده إلى القائمة \fIhead\fP. .SH المعايير BSD. .SH التاريخ 4.4BSD. .SH العلل لا تسمح \fBLIST_FOREACH\fP() بإزالة أو تحرير \fIvar\fP داخل الحلقة، لأن ذلك سيتداخل مع التجوال. تُصلح \fBLIST_FOREACH_SAFE\fP()، الموجودة في أنظمة BSD ولكنها غير موجودة في glibc، هذا القيد بالسماح بإزالة \fIvar\fP بأمان من القائمة وتحريره من داخل الحلقة دون التداخل مع التجوال. .SH أمثلة .\" SRC BEGIN (list.c) .EX #include #include #include #include \& struct entry { int data; LIST_ENTRY(entry) entries; /* List */ }; \& LIST_HEAD(listhead, entry); \& int main(void) { struct entry *n1, *n2, *n3, *np; struct listhead head; /* List head */ int i; \& LIST_INIT(&head); /* Initialize the list */ \& n1 = malloc(sizeof(struct entry)); /* Insert at the head */ LIST_INSERT_HEAD(&head, n1, entries); \& n2 = malloc(sizeof(struct entry)); /* Insert after */ LIST_INSERT_AFTER(n1, n2, entries); \& n3 = malloc(sizeof(struct entry)); /* Insert before */ LIST_INSERT_BEFORE(n2, n3, entries); \& i = 0; /* Forward traversal */ LIST_FOREACH(np, &head, entries) np\->data = i++; \& LIST_REMOVE(n2, entries); /* Deletion */ free(n2); /* Forward traversal */ LIST_FOREACH(np, &head, entries) printf("%i\[rs]n", np\->data); /* List deletion */ n1 = LIST_FIRST(&head); while (n1 != NULL) { n2 = LIST_NEXT(n1, entries); free(n1); n1 = n2; } LIST_INIT(&head); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" \fBinsque\fP(3)، \fBqueue\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 .