.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1993, Giorgio Ciucci .\" Copyright 2004-2005, 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 semctl 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم semctl \- عمليات التحكم في الإشارات (semaphore) لنظام V .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBint semctl(int \fP\fIsemid\fP\fB, int \fP\fIsemnum\fP\fB, int \fP\fIop\fP\fB, ...);\fP .fi .SH الوصف \fBsemctl\fP() ينفذ عملية التحكم المحددة بواسطة \fIop\fP على مجموعة الإشارات (semaphore) لنظام V التي يُعرّفها \fIsemid\fP، أو على الإشارة رقم \fIsemnum\fP من تلك المجموعة. (يتم ترقيم الإشارات في المجموعة بدءًا من 0.) .P تحتوي هذه الدالة على ثلاث أو أربع وسائط، اعتمادًا على \fIop\fP. عندما يكون هناك أربع وسائط، تكون الوسيطة الرابعة من النوع \fIunion semun\fP. يجب على \fIالبرنامج المستدعي\fP تعريف هذا الاتحاد (union) كما يلي: .P .in +4n .EX union semun { int val; /* Value for SETVAL */ struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */ unsigned short *array; /* Array for GETALL, SETALL */ struct seminfo *__buf; /* Buffer for IPC_INFO (Linux\-specific) */ }; .EE .in .P يتم تعريف بنية البيانات \fIsemid_ds\fP في \fI\fP كما يلي: .P .in +4n .EX struct semid_ds { struct ipc_perm sem_perm; /* Ownership and permissions */ time_t sem_otime; /* Last semop time */ time_t sem_ctime; /* Creation time/time of last modification via semctl() */ unsigned long sem_nsems; /* # of semaphores in set */ }; .EE .in .P حقول بنية \fIsemid_ds\fP هي كما يلي: .TP 11 \fIsem_perm\fP هذه بنية \fIipc_perm\fP (انظر أدناه) تحدد أذونات الوصول على مجموعة الإشارات. .TP \fIsem_otime\fP وقت آخر استدعاء نظام \fBsemop\fP(2). .TP \fIsem_ctime\fP وقت إنشاء مجموعة الإشارات أو وقت آخر عملية \fBsemctl\fP() \fBIPCSET\fP أو \fBSETVAL\fP أو \fBSETALL\fP. .TP \fIsem_nsems\fP عدد الإشارات في المجموعة. يتم الإشارة إلى كل إشارة في المجموعة بعدد صحيح غير سالب يتراوح من \fB0\fP إلى \fIsem_nsems\-1\fP. .P بنية \fIipc_perm\fP مُعرفة كالتالي (الحقول المميزة قابلة للضبط باستخدام \fBIPC_SET\fP): .P .in +4n .EX struct ipc_perm { key_t __key; /* Key supplied to semget(2) */ uid_t \f[B]uid\fR; /* Effective UID of owner */ gid_t \f[B]gid\fR; /* Effective GID of owner */ uid_t cuid; /* Effective UID of creator */ gid_t cgid; /* Effective GID of creator */ unsigned short \f[B]mode\fR; /* Permissions */ unsigned short __seq; /* Sequence number */ }; .EE .in .P تحدد البتات الـ 9 الأقل أهمية في حقل \fImode\fP لهيكل \fIipc_perm\fP أذونات الوصول لقطاع الذاكرة المشتركة. بتات الأذونات هي كما يلي: .TS l l. 0400 مقروء من المستخدم 0200 الكتابة بواسطة المستخدم 0040 مقروء من المجموعة 0020 الكتابة بواسطة المجموعة 0004 مقروء من الآخرين 0002 الكتابة بواسطة الآخرين .TE .P في الواقع، تعني "write" "تعديل" لمجموعة الإشارات. البتات 0100 و0010 و0001 (بتات التنفيذ) غير مستخدمة من قبل النظام. .P القيم الصالحة لـ \fIop\fP هي: .TP \fBIPC_STAT\fP انسخ المعلومات من بنية بيانات النواة المرتبطة بـ \fIsemid\fP إلى بنية \fIsemid_ds\fP المشار إليها بواسطة \fIarg.buf\fP. يتم تجاهل الوسيطة \fIsemnum\fP. يجب أن تمتلك العملية المستدعية إذن قراءة على مجموعة الإشارات. .TP \fBIPC_SET\fP اكتب قيم بعض أعضاء بنية \fIsemid_ds\fP المشار إليها بواسطة \fIarg.buf\fP إلى بنية بيانات النواة المرتبطة بمجموعة الإشارات هذه، مع تحديث عضو \fIsem_ctime\fP الخاص بها أيضًا. .IP يتم تحديث الأعضاء التالية من البنية: \fIsem_perm.uid\fP و\fIsem_perm.gid\fP و(أقل 9 بتات أهمية من) \fIsem_perm.mode\fP. .IP يجب أن يتطابق UID الفعّال للعملية المستدعية مع المالك (\fIsem_perm.uid\fP) أو المنشئ (\fIsem_perm.cuid\fP) لمجموعة الإشارات، أو يجب أن يكون المستدعي متميزًا (privileged). يتم تجاهل الوسيطة \fIsemnum\fP. .TP \fBIPC_RMID\fP أزل مجموعة الإشارات فورًا، مع إيقاظ جميع العمليات المحظورة في استدعاءات \fBsemop\fP(2) على المجموعة (مع إرجاع خطأ وتعيين \fIerrno\fP إلى \fBEIDRM\fP). يجب أن يتطابق معرف المستخدم الفعّال للعملية المستدعية مع المنشئ أو المالك لمجموعة الإشارات، أو يجب أن يكون المستدعي متميزًا. يتم تجاهل الوسيطة \fIsemnum\fP. .TP \fBIPC_INFO\fP (خاص بلينكس) أعد معلومات حول حدود ومعلمات الإشارات على مستوى النظام في البنية المشار إليها بواسطة \fIarg.__buf\fP. هذه البنية من النوع \fIseminfo\fP، المُعرّفة في \fI\fP إذا تم تعريف ماكرو اختبار الميزة \fB_GNU_SOURCE\fP: .IP .in +4n .EX struct seminfo { int semmap; /* Number of entries in semaphore map; unused within kernel */ int semmni; /* Maximum number of semaphore sets */ int semmns; /* Maximum number of semaphores in all semaphore sets */ int semmnu; /* System\-wide maximum number of undo structures; unused within kernel */ int semmsl; /* Maximum number of semaphores in a set */ int semopm; /* Maximum number of operations for semop(2) */ int semume; /* Maximum number of undo entries per process; unused within kernel */ int semusz; /* Size of struct sem_undo */ int semvmx; /* Maximum semaphore value */ int semaem; /* Max.\& value that can be recorded for semaphore adjustment (SEM_UNDO) */ }; .EE .in .IP يمكن تغيير إعدادات \fIsemmsl\fP و\fIsemmns\fP و\fIsemopm\fP و\fIsemmni\fP عبر \fI/proc/sys/kernel/sem\fP؛ انظر \fBproc\fP(5) للتفاصيل. .TP \fBSEM_INFO\fP (خاص بلينكس) أعد بنية \fIseminfo\fP تحتوي على نفس المعلومات كما في \fBIPC_INFO\fP، باستثناء أن الحقول التالية تُعاد بمعلومات حول موارد النظام المستهلكة بواسطة الإشارات: حقل \fIsemusz\fP يعيد عدد مجموعات الإشارات الموجودة حاليًا على النظام؛ وحقل \fIsemaem\fP يعيد العدد الإجمالي للإشارات في جميع مجموعات الإشارات على النظام. .TP \fBSEM_STAT\fP (خاص بلينكس) أعد بنية \fIsemid_ds\fP كما في \fBIPC_STAT\fP. ومع ذلك، فإن الوسيطة \fIsemid\fP ليست معرف إشارة، بل هي فهرس في المصفوفة الداخلية للنواة التي تحتفظ بمعلومات حول جميع مجموعات الإشارات على النظام. .TP \fBSEM_STAT_ANY\fP (خاص بلينكس، منذ لينكس 4.17) أعد بنية \fIsemid_ds\fP كما في \fBSEM_STAT\fP. لكن، لا يُفحص \fIsem_perm.mode\fP للوصول للقراءة لـ \fIsemid\fP مما يعني أن أي مستخدم يمكنه استخدام هذه العملية (تمامًا كما يمكن لأي مستخدم قراءة \fI/proc/sysvipc/sem\fP للحصول على نفس المعلومات). .TP \fBGETALL\fP أعد \fBsemval\fP (أي القيمة الحالية) لجميع الإشارات في المجموعة إلى \fIarg.array\fP. الوسيط \fIsemnum\fP يُتجاهل. يجب أن تملك العملية المستدعية صلاحية قراءة على مجموعة الإشارة. .TP \fBGETNCNT\fP أعد قيمة \fBsemncnt\fP للإشارة رقم \fIsemnum\fP في المجموعة (أي عدد العمليات المنتظرة لزيادة قيمة الإشارة). يجب أن تملك العملية المستدعية صلاحية قراءة على مجموعة الإشارة. .TP \fBGETPID\fP أعد قيمة \fBsempid\fP للإشارة رقم \fIsemnum\fP في المجموعة. هذا هو PID العملية التي نفذت آخر عملية على تلك الإشارة (لكن انظر الإصدارات). يجب أن تملك العملية المستدعية صلاحية قراءة على مجموعة الإشارة. .TP \fBGETVAL\fP أعد \fBsemval\fP (أي قيمة الإشارة) للإشارة رقم \fIsemnum\fP في المجموعة. يجب أن تملك العملية المستدعية صلاحية قراءة على مجموعة الإشارة. .TP \fBGETZCNT\fP أعد قيمة \fBsemzcnt\fP للإشارة رقم \fIsemnum\fP في المجموعة (أي عدد العمليات المنتظرة لتصبح قيمة الإشارة 0). يجب أن تملك العملية المستدعية صلاحية قراءة على مجموعة الإشارة. .TP \fBSETALL\fP اضبط قيم \fBsemval\fP لجميع الإشارات في المجموعة باستخدام \fIarg.array\fP، مع تحديث عضو \fIsem_ctime\fP من بنية \fIsemid_ds\fP المرتبطة بالمجموعة. تُمسح إدخالات التراجع (انظر \fBsemop\fP(2)) للإشارات المعدلة في جميع العمليات. إذا كانت التغييرات في قيم الإشارات تسمح باستدعاءات \fBsemop\fP(2) المحجوبة في عمليات أخرى بالمتابعة، فتُستيقظ تلك العمليات. الوسيط \fIsemnum\fP يُتجاهل. يجب أن تملك العملية المستدعية صلاحية تغيير (كتابة) على مجموعة الإشارة. .TP \fBSETVAL\fP اضبط قيمة الإشارة (\fBsemval\fP) إلى \fIarg.val\fP للإشارة رقم \fIsemnum\fP في المجموعة، مع تحديث عضو \fIsem_ctime\fP من بنية \fIsemid_ds\fP المرتبطة بالمجموعة. تُمسح إدخالات التراجع للإشارات المعدلة في جميع العمليات. إذا كانت التغييرات في قيم الإشارات تسمح باستدعاءات \fBsemop\fP(2) المحجوبة في عمليات أخرى بالمتابعة، فتُستيقظ تلك العمليات. يجب أن تملك العملية المستدعية صلاحية تغيير على مجموعة الإشارة. .SH "قيمة الإرجاع" عند النجاح، تُرجع \fBsemctl\fP() قيمة غير سالبة تعتمد على \fIop\fP كالتالي: .TP \fBGETNCNT\fP قيمة \fBsemncnt\fP. .TP \fBGETPID\fP قيمة \fBsempid\fP. .TP \fBGETVAL\fP قيمة \fBsemval\fP. .TP \fBGETZCNT\fP قيمة \fBsemzcnt\fP. .TP \fBIPC_INFO\fP فهرس أعلى إدخال مستخدم في المصفوفة الداخلية للنواة التي تسجل معلومات عن جميع مجموعات الإشارات. (يمكن استخدام هذه المعلومات مع عمليات \fBSEM_STAT\fP أو \fBSEM_STAT_ANY\fP المتكررة للحصول على معلومات عن جميع مجموعات الإشارات في النظام.) .TP \fBSEM_INFO\fP كما في \fBIPC_INFO\fP. .TP \fBSEM_STAT\fP معرف مجموعة الإشارة التي أُعطي فهرسها في \fIsemid\fP. .TP \fBSEM_STAT_ANY\fP كما في \fBSEM_STAT\fP. .P جميع قيم \fIop\fP الأخرى تُرجع 0 عند النجاح. .P عند الفشل، تُرجع \fBsemctl\fP() القيمة \-1 وتُعيِّن \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEACCES\fP الوسيطة \fIop\fP تحمل إحدى القيم \fBGETALL\fP أو \fBGETPID\fP أو \fBGETVAL\fP أو \fBGETNCNT\fP أو \fBGETZCNT\fP أو \fBIPC_STAT\fP أو \fBSEM_STAT\fP أو \fBSEM_STAT_ANY\fP أو \fBSETALL\fP أو \fBSETVAL\fP ولا تمتلك العملية المستدعية الصلاحيات المطلوبة على مجموعة الإشارات ولا تمتلك القدرة \fBCAP_IPC_OWNER\fP في مساحة المستخدم التي تحكم مساحة IPC الخاصة بها. .TP \fBEFAULT\fP العنوان المشار إليه بواسطة \fIarg.buf\fP أو \fIarg.array\fP غير قابل للوصول. .TP \fBEIDRM\fP حُذفت مجموعة السيمافور. .TP \fBEINVAL\fP قيمة غير صالحة لـ \fIop\fP أو \fIsemid\fP. أو: بالنسبة لعملية \fBSEM_STAT\fP، تشير قيمة الفهرس المحددة في \fIsemid\fP إلى فتحة مصفوفة غير مستخدمة حالياً. .TP \fBEPERM\fP الوسيطة \fIop\fP تحمل القيمة \fBIPC_SET\fP أو \fBIPC_RMID\fP لكن معرف المستخدم الفعّال للعملية المستدعية ليس هو المنشئ (كما هو موجود في \fIsem_perm.cuid\fP) أو المالك (كما هو موجود في \fIsem_perm.uid\fP) لمجموعة الإشارات، ولا تمتلك العملية القدرة \fBCAP_SYS_ADMIN\fP. .TP \fBERANGE\fP الوسيطة \fIop\fP تحمل القيمة \fBSETALL\fP أو \fBSETVAL\fP والقيمة التي سيُعيَّن إليها \fBsemval\fP (لبعض الإشارات في المجموعة) أقل من 0 أو أكبر من الحد التنفيذي \fBSEMVMX\fP. .SH الإصدارات .\" POSIX.1-2001, POSIX.1-2008 .\" يحدد POSIX.1 حقل \fIsem_nsems\fP في بنية \fIsemid_ds\fP على أنه من النوع \fIunsigned\ short\fP، والحقل مُعرَّف بهذا الشكل على معظم الأنظمة الأخرى. كان مُعرَّفاً بهذا الشكل أيضًا على Linux 2.2 والإصدارات الأقدم، لكن منذ Linux 2.4، أصبح الحقل من النوع \fIunsigned\ long\fP. .SS "قيمة sempid" يُعرِّف POSIX.1 \fIsempid\fP على أنه "معرف العملية لآخر عملية" على إشارة، ويُلاحظ صراحةً أن هذه القيمة تُعيَّن بواسطة استدعاء ناجح لـ \fBsemop\fP(2)، مما يعني أن لا واجهة أخرى تؤثر على قيمة \fIsempid\fP. .P .\" At least OpenSolaris (and, one supposes, older Solaris) and Darwin بينما تلتزم بعض التطبيقات بالسلوك المحدد في POSIX.1، لا تفعل أخرى ذلك. (الخطأ هنا ربما يقع على POSIX.1 بقدر ما فشل في التقاط النطاق الكامل لسلوكيات التطبيق الموجودة.) تُحدِّث تطبيقات أخرى متنوعة أيضًا \fIsempid\fP للعمليات الأخرى التي تُحدِّث قيمة الإشارة: عمليات \fBSETVAL\fP و \fBSETALL\fP، بالإضافة إلى التعديلات على الإشارات التي تُجرى عند إنهاء العملية نتيجة استخدام العلم \fBSEM_UNDO\fP (انظر \fBsemop\fP(2)). .P .\" commit a5f4db877177d2a3d7ae62a7bac3a5a27e083d7f يُحدِّث Linux أيضًا \fIsempid\fP لعمليات \fBSETVAL\fP وتعديلات الإشارات. ومع ذلك، بشكل غير متسق إلى حد ما، حتى Linux 4.5 بما في ذلك، لم يُحدِّث النواة \fIsempid\fP لعمليات \fBSETALL\fP. تم تصحيح هذا في Linux 4.6. .SH المعايير POSIX.1\-2024. .SH التاريخ .\" SVr4 documents more error conditions EINVAL and EOVERFLOW. POSIX.1\-2001، SVr4. .P تم تعريف عدة حقول في \fIstruct\ semid_ds\fP على أنها من النوع \fIshort\fP تحت Linux 2.2 وأصبحت من النوع \fIlong\fP تحت Linux 2.4. للاستفادة من هذا، يكفي إعادة الترجمة تحت glibc\-2.1.91 أو أحدث. (تميز النواة بين الاستدعاءات القديمة والجديدة بواسطة علم \fBIPC_64\fP في \fIop\fP.) .P .\" POSIX.1-2001, POSIX.1-2008 في بعض الإصدارات الأقدم من glibc، كان الاتحاد \fIsemun\fP مُعرَّفاً في \fI\fP، لكن POSIX.1 يتطلب أن يُعرِّف المستدعي هذا الاتحاد. في إصدارات glibc حيث هذا الاتحاد \fIغير\fP مُعرَّف، يتم تعريف الماكرو \fB_SEM_SEMUN_UNDEFINED\fP في \fI\fP. .SH ملاحظات تُستخدم عمليات \fBIPC_INFO\fP و \fBSEM_STAT\fP و \fBSEM_INFO\fP بواسطة برنامج \fBipcs\fP(1) لتوفير معلومات عن الموارد المخصصة. في المستقبل، قد يتم تعديل هذه أو نقلها إلى واجهة نظام الملفات \fI/proc\fP. .P الحد النظامي التالي على مجموعات الإشارات يؤثر على استدعاء \fBsemctl\fP(): .TP \fBSEMVMX\fP القيمة القصوى لـ \fBsemval\fP: تعتمد على التطبيق (32767). .P لتحقيق قابلية نقل أكبر، من الأفضل دائماً استدعاء \fBsemctl\fP() بأربع وسائط. .SH أمثلة انظر \fBshmop\fP(2). .SH "انظر أيضًا" \fBipc\fP(2), \fBsemget\fP(2), \fBsemop\fP(2), \fBcapabilities\fP(7), \fBsem_overview\fP(7), \fBsysvipc\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 .