.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1996, Peter Memishian .\" Copyright 2010, 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 insque 3 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم insque, remque \- إدراج/إزالة عنصر من طابور .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBvoid insque(void *\fP\fIelem\fP\fB, void *\fP\fIprev\fP\fB);\fP \fBvoid remque(void *\fP\fIelem\fP\fB);\fP .fi .P .RS -4 متطلبات ماكروات اختبار الميزات لـ glibc (انظر \fBfeature_test_macros\fP(7)): .RE .P \fBinsque\fP()، \fBremque\fP(): .nf .\" || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED _XOPEN_SOURCE >= 500 || /* glibc >= 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _SVID_SOURCE .fi .SH الوصف تتعامل الدالتان \fBinsque\fP() و \fBremque\fP() مع القوائم المرتبطة مزدوجة الاتجاه. كل عنصر في القائمة هو بنية يكون أول عنصرين فيها مؤشرًا أماميًا ومؤشرًا خلفيًا. قد تكون القائمة المرتبطة خطية (أي مؤشر أمامي NULL في نهاية القائمة ومؤشر خلفي NULL في بداية القائمة) أو دائرية. .P تُدرج الدالة \fBinsque\fP() العنصر المشار إليه بواسطة \fIelem\fP مباشرة بعد العنصر المشار إليه بواسطة \fIprev\fP. .P إذا كانت القائمة خطية، فيمكن استخدام الاستدعاء \fIinsque(elem, NULL)\fP لإدراج عنصر القائمة الأولي، ويضبط الاستدعاء المؤشرين الأمامي والخلفي لـ \fIelem\fP إلى NULL. .P إذا كانت القائمة دائرية، يجب على المستدعي التأكد من تهيئة المؤشرين الأمامي والخلفي للعنصر الأول للإشارة إلى ذلك العنصر، ويجب أن تشير وسيطة \fIprev\fP لاستدعاء \fBinsque\fP() أيضًا إلى العنصر. .P تزيل الدالة \fBremque\fP() العنصر المشار إليه بواسطة \fIelem\fP من القائمة المرتبطة مزدوجة الاتجاه. .SH السمات للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. الواجهة السمة القيمة T{ .na .nh \fBinsque\fP(), \fBremque\fP() T} سلامة الخيوط MT\-Safe .TE .SH الإصدارات .\" e.g., SunOS, Linux libc4 and libc5 في الأنظمة القديمة، كانت وسائط هذه الدوال من النوع \fIstruct\ qelem\ *\fP، المُعرَّف كالتالي: .P .in +4n .EX struct qelem { struct qelem *q_forw; struct qelem *q_back; char q_data[1]; }; .EE .in .P هذا ما ستحصل عليه إذا عُرِّف \fB_GNU_SOURCE\fP قبل تضمين \fI\fP. .P .\" Linux libc4 and libc 5 placed them in .\" .IR . يختلف موقع النماذج الأولية لهذه الدوال بين عدة إصدارات من UNIX. ما سبق هو إصدار POSIX. تضعها بعض الأنظمة في \fI\fP. .SH المعايير POSIX.1\-2008. .SH التاريخ POSIX.1\-2001. .SH العلل في glibc 2.4 والإصدارات الأقدم، لم يكن من الممكن تحديد \fIprev\fP كـ NULL. وبالتالي، لبناء قائمة خطية، كان على المستدعي بناء قائمة باستخدام استدعاء أولي يحتوي على أول عنصرين من القائمة، مع تهيئة المؤشرين الأمامي والخلفي في كل عنصر بشكل مناسب. .SH أمثلة يوضح البرنامج أدناه استخدام \fBinsque\fP(). إليك مثال لتشغيل البرنامج: .P .in +4n .EX $ \fB./a.out \-c a b c\fP Traversing completed list: a b c That was a circular list .EE .in .SS "مصدر البرنامج" .\" SRC BEGIN (insque.c) \& .EX #include #include #include #include \& struct element { struct element *forward; struct element *backward; char *name; }; \& static struct element * new_element(void) { struct element *e; \& e = malloc(sizeof(*e)); if (e == NULL) { fprintf(stderr, "malloc() failed\[rs]n"); exit(EXIT_FAILURE); } \& return e; } \& int main(int argc, char *argv[]) { struct element *first, *elem, *prev; int circular, opt, errfnd; \& /* The "\-c" command\-line option can be used to specify that the list is circular. */ \& errfnd = 0; circular = 0; while ((opt = getopt(argc, argv, "c")) != \-1) { switch (opt) { case \[aq]c\[aq]: circular = 1; break; default: errfnd = 1; break; } } \& if (errfnd || optind >= argc) { fprintf(stderr, "Usage: %s [\-c] string...\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& /* Create first element and place it in the linked list. */ \& elem = new_element(); first = elem; \& elem\->name = argv[optind]; \& if (circular) { elem\->forward = elem; elem\->backward = elem; insque(elem, elem); } else { insque(elem, NULL); } \& /* Add remaining command\-line arguments as list elements. */ \& while (++optind < argc) { prev = elem; \& elem = new_element(); elem\->name = argv[optind]; insque(elem, prev); } \& /* Traverse the list from the start, printing element names. */ \& printf("Traversing completed list:\[rs]n"); elem = first; do { printf(" %s\[rs]n", elem\->name); elem = elem\->forward; } while (elem != NULL && elem != first); \& if (elem == first) printf("That was a circular list\[rs]n"); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" \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 .