.\" -*- 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 STAILQ 3 "21 سبتمبر 2025" "صفحات دليل لينكس 6.18" .SH الاسم .\"SIMPLEQ_CONCAT, .\"SIMPLEQ_FOREACH_FROM, .\"SIMPLEQ_FOREACH_FROM_SAFE, .\"SIMPLEQ_FOREACH_SAFE, .\"SIMPLEQ_LAST, .\"SIMPLEQ_REMOVE_AFTER, .\"SIMPLEQ_SWAP, .\"STAILQ_FOREACH_FROM, .\"STAILQ_FOREACH_FROM_SAFE, .\"STAILQ_FOREACH_SAFE, .\"STAILQ_LAST, .\"STAILQ_REMOVE_AFTER, .\"STAILQ_SWAP SIMPLEQ_EMPTY, SIMPLEQ_ENTRY, SIMPLEQ_FIRST, SIMPLEQ_FOREACH, SIMPLEQ_HEAD, SIMPLEQ_HEAD_INITIALIZER, SIMPLEQ_INIT, SIMPLEQ_INSERT_AFTER, SIMPLEQ_INSERT_HEAD, SIMPLEQ_INSERT_TAIL, SIMPLEQ_NEXT, SIMPLEQ_REMOVE, SIMPLEQ_REMOVE_HEAD, STAILQ_CONCAT, STAILQ_EMPTY, STAILQ_ENTRY, STAILQ_FIRST, STAILQ_FOREACH, STAILQ_HEAD, STAILQ_HEAD_INITIALIZER, STAILQ_INIT, STAILQ_INSERT_AFTER, STAILQ_INSERT_HEAD, STAILQ_INSERT_TAIL, STAILQ_NEXT, STAILQ_REMOVE, STAILQ_REMOVE_HEAD, \- implementation of a singly linked tail queue .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBSTAILQ_ENTRY(TYPE);\fP .P \fBSTAILQ_HEAD(HEADNAME, TYPE);\fP \fBSTAILQ_HEAD STAILQ_HEAD_INITIALIZER(STAILQ_HEAD \fP\fIhead\fP\fB);\fP \fBvoid STAILQ_INIT(STAILQ_HEAD *\fP\fIhead\fP\fB);\fP .P \fBint STAILQ_EMPTY(STAILQ_HEAD *\fP\fIhead\fP\fB);\fP .P \fBvoid STAILQ_INSERT_HEAD(STAILQ_HEAD *\fP\fIhead\fP\fB,\fP \fB struct TYPE *\fP\fIelm\fP\fB, STAILQ_ENTRY \fP\fINAME\fP\fB);\fP \fBvoid STAILQ_INSERT_TAIL(STAILQ_HEAD *\fP\fIhead\fP\fB,\fP \fB struct TYPE *\fP\fIelm\fP\fB, STAILQ_ENTRY \fP\fINAME\fP\fB);\fP \fBvoid STAILQ_INSERT_AFTER(STAILQ_HEAD *\fP\fIhead\fP\fB, struct TYPE *\fP\fIlistelm\fP\fB,\fP \fB struct TYPE *\fP\fIelm\fP\fB, STAILQ_ENTRY \fP\fINAME\fP\fB);\fP .P .\" .BI "struct TYPE *STAILQ_LAST(STAILQ_HEAD *" head ", struct TYPE *" elm , .\" .BI " STAILQ_ENTRY " NAME ); \fBstruct TYPE *STAILQ_FIRST(STAILQ_HEAD *\fP\fIhead\fP\fB);\fP \fBstruct TYPE *STAILQ_NEXT(struct TYPE *\fP\fIelm\fP\fB, STAILQ_ENTRY \fP\fINAME\fP\fB);\fP .P .\" .BI "STAILQ_FOREACH_FROM(struct TYPE *" var ", STAILQ_HEAD *" head , .\" .BI " STAILQ_ENTRY " NAME ); .\" .P .\" .BI "STAILQ_FOREACH_SAFE(struct TYPE *" var ", STAILQ_HEAD *" head , .\" .BI " STAILQ_ENTRY " NAME ", struct TYPE *" temp_var ); .\" .BI "STAILQ_FOREACH_FROM_SAFE(struct TYPE *" var ", STAILQ_HEAD *" head , .\" .BI " STAILQ_ENTRY " NAME ", struct TYPE *" temp_var ); \fBSTAILQ_FOREACH(struct TYPE *\fP\fIvar\fP\fB, STAILQ_HEAD *\fP\fIhead\fP\fB, STAILQ_ENTRY \fP\fINAME\fP\fB);\fP .P .\" .BI "void STAILQ_REMOVE_AFTER(STAILQ_HEAD *" head ", struct TYPE *" elm , .\" .BI " STAILQ_ENTRY " NAME ); \fBvoid STAILQ_REMOVE(STAILQ_HEAD *\fP\fIhead\fP\fB, struct TYPE *\fP\fIelm\fP\fB, TYPE,\fP \fB STAILQ_ENTRY \fP\fINAME\fP\fB);\fP \fBvoid STAILQ_REMOVE_HEAD(STAILQ_HEAD *\fP\fIhead\fP\fB,\fP \fB STAILQ_ENTRY \fP\fINAME\fP\fB);\fP .P .\" .BI "void STAILQ_SWAP(STAILQ_HEAD *" head1 ", STAILQ_HEAD *" head2 , .\" .BI " STAILQ_ENTRY " NAME ); \fBvoid STAILQ_CONCAT(STAILQ_HEAD *\fP\fIhead1\fP\fB, STAILQ_HEAD *\fP\fIhead2\fP\fB);\fP .fi \fIملاحظة\fP: توجد وحدات ماكرو مطابقة مسبوقة بـ SIMPLEQ بدلاً من STAILQ؛ انظر VERSIONS. .SH الوصف تُعرِّف وحدات الماكرو هذه وتُشغِّل طوابير ذيل موصولة وحيدة الاتجاه. .P في تعريفات الماكرو، \fITYPE\fP هو اسم بنية مُعرَّفة من قبل المستخدم، ويجب أن تحتوي على حقل من النوع \fISTAILQ_ENTRY\fP، مُسمى \fINAME\fP. المُعامل \fIHEADNAME\fP هو اسم بنية مُعرَّفة من قبل المستخدم يجب أن تُصرَّح باستخدام الماكرو \fBSTAILQ_HEAD\fP(). .SS الإنشاء طابور الذيل الموصول وحيد الاتجاه يُرأَس ببنية مُعرَّفة بواسطة الماكرو \fBSTAILQ_HEAD\fP(). تحتوي هذه البنية على زوج من المؤشرات، واحد إلى أول عنصر في طابور الذيل والآخر إلى آخر عنصر في طابور الذيل. العناصر موصولة وحيدة الاتجاه لتقليل المساحة والعبء في معالجة المؤشرات على حساب إزالة O(n) للعناصر العشوائية. يمكن إضافة عناصر جديدة إلى طابور الذيل بعد عنصر موجود، في رأس طابور الذيل، أو في نهاية طابور الذيل. تُصرَّح بنية \fISTAILQ_HEAD\fP كالتالي: .P .in +4 .EX STAILQ_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 \fBSTAILQ_ENTRY\fP() يُعرِّف بنية تصل العناصر في طابور الذيل. .P \fBSTAILQ_HEAD_INITIALIZER\fP() يُقيِّم إلى مُهيِّئ لطابور الذيل \fIhead\fP. .P \fBSTAILQ_INIT\fP() يُهيِّئ طابور الذيل المُشار إليه بواسطة \fIhead\fP. .P \fBSTAILQ_EMPTY\fP() يُقيِّم إلى صحيح إذا لم تكن هناك عناصر في طابور الذيل. .SS إدراج \fBSTAILQ_INSERT_HEAD\fP() يُدرج العنصر الجديد \fIelm\fP في رأس طابور الذيل. .P تدرج \fBSTAILQ_INSERT_TAIL\fP() العنصر الجديد \fIelm\fP في نهاية طابور الذيل. .P تدرج \fBSTAILQ_INSERT_AFTER\fP() العنصر الجديد \fIelm\fP بعد العنصر \fIlistelm\fP. .SS اجتياز .\" .P .\" .BR STAILQ_LAST () .\" returns the last item on the tail queue. .\" If the tail queue is empty the return value is NULL . تُرجع \fBSTAILQ_FIRST\fP() أول عنصر في طابور الذيل أو NULL إذا كان طابور الذيل فارغًا. .P تُرجع \fBSTAILQ_NEXT\fP() العنصر التالي في طابور الذيل، أو NULL إذا كان هذا العنصر هو الأخير. .P .\" .P .\" .BR STAILQ_FOREACH_FROM () .\" behaves identically to .\" .BR STAILQ_FOREACH () .\" when .\" .I var .\" is NULL, else it treats .\" .I var .\" as a previously found STAILQ element and begins the loop at .\" .I var .\" instead of the first element in the STAILQ referenced by .\" .IR head . .\" .P .\" .BR STAILQ_FOREACH_SAFE () .\" traverses the tail queue referenced by .\" .I head .\" in the forward direction, assigning each element .\" in turn to .\" .IR var . .\" However, unlike .\" .BR STAILQ_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 STAILQ_FOREACH_FROM_SAFE () .\" behaves identically to .\" .BR STAILQ_FOREACH_SAFE () .\" when .\" .I var .\" is NULL, else it treats .\" .I var .\" as a previously found STAILQ element and begins the loop at .\" .I var .\" instead of the first element in the STAILQ referenced by .\" .IR head . تعبر \fBSTAILQ_FOREACH\fP() طابور الذيل المشار إليه بـ \fIhead\fP في الاتجاه الأمامي، مع تخصيص كل عنصر بدوره إلى \fIvar\fP. .SS إزالة تزيل \fBSTAILQ_REMOVE\fP() العنصر \fIelm\fP من طابور الذيل. .P .\" .P .\" .BR STAILQ_REMOVE_AFTER () .\" removes the element after .\" .I elm .\" from the tail queue. .\" Unlike .\" .BR STAILQ_REMOVE (), .\" this macro does not traverse the entire tail queue. تزيل \fBSTAILQ_REMOVE_HEAD\fP() العنصر الموجود في رأس طابور الذيل. لتحقيق الكفاءة المثلى، يجب أن تستخدم العناصر التي تُزال من رأس طابور الذيل هذه الكلية (macro) صراحةً بدلاً من الكلية العامة \fBSTAILQ_REMOVE\fP(). .SS "ميزات أخرى" .\" .P .\" .BR STAILQ_SWAP () .\" swaps the contents of .\" .I head1 .\" and .\" .IR head2 . تسلسل \fBSTAILQ_CONCAT\fP() طابور الذيل الذي يرأسه \fIhead2\fP إلى نهاية الطابور الذي يرأسه \fIhead1\fP مع إزالة جميع المدخلات من الأول. .SH "قيمة الإرجاع" تُرجع \fBSTAILQ_EMPTY\fP() قيمة غير صفرية إذا كان الطابور فارغًا، وصفرًا إذا كان الطابور يحتوي على مدخل واحد على الأقل. .P تُرجع \fBSTAILQ_FIRST\fP() و \fBSTAILQ_NEXT\fP() مؤشرًا إلى بنية \fITYPE\fP الأولى أو التالية، على التوالي. .P تُرجع \fBSTAILQ_HEAD_INITIALIZER()\fP مُهيئًا يمكن تخصيصه للطابور \fIhead\fP. .SH الإصدارات توفر بعض أنظمة BSD الماكرو SIMPLEQ بدلاً من STAILQ. وهما متطابقان، لكن لأسباب تاريخية سُمِّيَا بشكل مختلف في أنظمة BSD المختلفة. نشأ STAILQ في FreeBSD، ونشأ SIMPLEQ في NetBSD. لأسباب تتعلق بالتوافق، توفر بعض الأنظمة كلا المجموعتين من الماكروهات. توفر glibc كلاً من STAILQ و SIMPLEQ، وهما متطابقان باستثناء عدم وجود مكافئ في SIMPLEQ لـ \fBSTAILQ_CONCAT\fP(). .SH العلل لا تسمح \fBSTAILQ_FOREACH\fP() بإزالة \fIvar\fP أو تحريره داخل الحلقة، لأن ذلك سيتداخل مع العبور. تعالج \fBSTAILQ_FOREACH_SAFE\fP()، الموجودة في أنظمة BSD ولكنها غير موجودة في glibc، هذا القيد بالسماح بإزالة \fIvar\fP بأمان من القائمة وتحريره من داخل الحلقة دون التداخل مع العبور. .SH المعايير BSD. .SH التاريخ 4.4BSD. .SH أمثلة .\" SRC BEGIN (stailq.c) .EX #include #include #include #include \& struct entry { int data; STAILQ_ENTRY(entry) entries; /* Singly linked tail queue */ }; \& STAILQ_HEAD(stailhead, entry); \& int main(void) { struct entry *n1, *n2, *n3, *np; struct stailhead head; /* Singly linked tail queue head */ \& STAILQ_INIT(&head); /* Initialize the queue */ \& n1 = malloc(sizeof(struct entry)); /* Insert at the head */ STAILQ_INSERT_HEAD(&head, n1, entries); \& n1 = malloc(sizeof(struct entry)); /* Insert at the tail */ STAILQ_INSERT_TAIL(&head, n1, entries); \& n2 = malloc(sizeof(struct entry)); /* Insert after */ STAILQ_INSERT_AFTER(&head, n1, n2, entries); \& STAILQ_REMOVE(&head, n2, entry, entries); /* Deletion */ free(n2); \& n3 = STAILQ_FIRST(&head); STAILQ_REMOVE_HEAD(&head, entries); /* Deletion from the head */ free(n3); \& n1 = STAILQ_FIRST(&head); n1\->data = 0; for (unsigned int i = 1; i < 5; i++) { n1 = malloc(sizeof(struct entry)); STAILQ_INSERT_HEAD(&head, n1, entries); n1\->data = i; } /* Forward traversal */ STAILQ_FOREACH(np, &head, entries) printf("%i\[rs]n", np\->data); /* TailQ deletion */ n1 = STAILQ_FIRST(&head); while (n1 != NULL) { n2 = STAILQ_NEXT(n1, entries); free(n1); n1 = n2; } STAILQ_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 .