.\" -*- coding: UTF-8 -*- .\" Copyright 1993, Giorgio Ciucci .\" Copyright 2020, 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 semget 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم semget \- الحصول على معرّف مجموعة إشارات System V .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .fi .P \fBint semget(key_t \fP\fIkey\fP\fB,\fP \fBint \fP\fInsems\fP\fB,\fP \fBint \fP\fIsemflg\fP\fB);\fP .SH الوصف استدعاء النظام \fBsemget\fP() يُرجع معرف مجموعة إشارات System\ V المرتبط بالوسيط \fIkey\fP. يمكن استخدامه إما للحصول على معرف مجموعة إشارات مُنشأة سابقًا (عندما يكون \fIsemflg\fP صفرًا و \fIkey\fP لا يحمل القيمة \fBIPC_PRIVATE\fP)، أو لإنشاء مجموعة جديدة. .P يتم إنشاء مجموعة جديدة من \fInsems\fP إشارة إذا كان \fIkey\fP يحمل القيمة \fBIPC_PRIVATE\fP أو إذا لم تكن هناك مجموعة إشارات موجودة مرتبطة بـ \fIkey\fP وتم تحديد \fBIPC_CREAT\fP في \fIsemflg\fP. .P إذا حدد \fIsemflg\fP كلاً من \fBIPC_CREAT\fP و \fBIPC_EXCL\fP وكانت مجموعة إشارات موجودة بالفعل لـ \fIkey\fP، فإن \fBsemget\fP() يفشل مع تعيين \fIerrno\fP إلى \fBEEXIST\fP. (هذا مماثل لتأثير الجمع \fBO_CREAT | O_EXCL\fP لـ \fBopen\fP(2).) .P عند الإنشاء، تحدد أقل 9 بتات أهمية من الوسيط \fIsemflg\fP الأذونات (للمالك والمجموعة والآخرين) لمجموعة الإشارات. هذه البتات لها نفس التنسيق ونفس المعنى مثل وسيط \fImode\fP لـ \fBopen\fP(2) (على الرغم من أن أذونات التنفيذ ليست ذات معنى للإشارات، وأذونات الكتابة تعني الإذن بتغيير قيم الإشارات). .P عند إنشاء مجموعة إشارات جديدة، يقوم \fBsemget\fP() بتهيئة بنية البيانات المرتبطة بالمجموعة، \fIsemid_ds\fP (انظر \fBsemctl\fP(2))، على النحو التالي: .IP \[bu] 3 يتم تعيين \fIsem_perm.cuid\fP و \fIsem_perm.uid\fP إلى معرف المستخدم الفعّال للعملية المستدعية. .IP \[bu] يتم تعيين \fIsem_perm.cgid\fP و \fIsem_perm.gid\fP إلى معرف المجموعة الفعّال للعملية المستدعية. .IP \[bu] يتم تعيين أقل 9 بتات أهمية من \fIsem_perm.mode\fP إلى أقل 9 بتات أهمية من \fIsemflg\fP. .IP \[bu] يتم تعيين \fIsem_nsems\fP إلى قيمة \fInsems\fP. .IP \[bu] يتم تعيين \fIsem_otime\fP إلى 0. .IP \[bu] يتم تعيين \fIsem_ctime\fP إلى الوقت الحالي. .P يمكن أن يكون الوسيط \fInsems\fP 0 (غير مهم) عندما لا يتم إنشاء مجموعة إشارات. وإلا، يجب أن يكون \fInsems\fP أكبر من 0 وأقل من أو يساوي الحد الأقصى لعدد الإشارات لكل مجموعة إشارات (\fBSEMMSL\fP). .P .\" and a check is made to see if it is marked for destruction. إذا كانت مجموعة الإشارات موجودة بالفعل، يتم التحقق من الأذونات. .SH "قيمة الإرجاع" عند النجاح، يُرجع \fBsemget\fP() معرف مجموعة الإشارات (عدد صحيح غير سالب). عند الفشل، يتم إرجاع \-1، ويتم تعيين \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEACCES\fP توجد مجموعة إشارات لـ \fIkey\fP، لكن العملية المستدعية لا تملك الإذن بالوصول إلى المجموعة، ولا تملك القدرة \fBCAP_IPC_OWNER\fP في مساحة المستخدم التي تحكم مساحة IPC الخاصة بها. .TP \fBEEXIST\fP .\" .TP .\" .B EIDRM .\" The semaphore set is marked to be deleted. تم تحديد \fBIPC_CREAT\fP و \fBIPC_EXCL\fP في \fIsemflg\fP، لكن مجموعة إشارات موجودة بالفعل لـ \fIkey\fP. .TP \fBEINVAL\fP \fInsems\fP أقل من 0 أو أكبر من الحد الأقصى لعدد الإشارات لكل مجموعة إشارات (\fBSEMMSL\fP). .TP \fBEINVAL\fP توجد مجموعة إشارات مقابلة لـ \fIkey\fP بالفعل، لكن \fInsems\fP أكبر من عدد الإشارات في تلك المجموعة. .TP \fBENOENT\fP لا توجد مجموعة إشارات لـ \fIkey\fP ولم يحدد \fIsemflg\fP \fBIPC_CREAT\fP. .TP \fBENOMEM\fP يجب إنشاء مجموعة إشارات لكن النظام لا يملك ذاكرة كافية لبنية البيانات الجديدة. .TP \fBENOSPC\fP يجب إنشاء مجموعة إشارات لكن سيتم تجاوز حد النظام للحد الأقصى لعدد مجموعات الإشارات (\fBSEMMNI\fP)، أو الحد الأقصى لعدد الإشارات على مستوى النظام (\fBSEMMNS\fP). .SH المعايير POSIX.1\-2024. .SH التاريخ .\" SVr4 documents additional error conditions EFBIG, E2BIG, EAGAIN, .\" ERANGE, EFAULT. SVr4, POSIX.1\-2001. .SH ملاحظات .\" \fBIPC_PRIVATE\fP ليس حقل علم بل هو نوع \fIkey_t\fP. إذا تم استخدام هذه القيمة الخاصة لـ \fIkey\fP، يتجاهل استدعاء النظام كل شيء باستثناء أقل 9 بتات أهمية من \fIsemflg\fP وينشئ مجموعة إشارات جديدة (عند النجاح). .SS "تهيئة الإشارة" .\" In truth, every one of the many implementations that I've tested sets .\" the values to zero, but I suppose there is/was some obscure .\" implementation out there that does not. قيم الإشارات في مجموعة منشأة حديثًا غير محددة. (POSIX.1\-2001 و POSIX.1\-2008 صريحان في هذه النقطة، على الرغم من أن POSIX.1\-2008 يلاحظ أن إصدارًا مستقبليًا من المعيار قد يتطلب من التنفيذ تهيئة الإشارات إلى 0.) على الرغم من أن Linux، مثل العديد من التطبيقات الأخرى، يقوم بتهيئة قيم الإشارات إلى 0، لا يمكن لتطبيق محمول الاعتماد على هذا: يجب عليه تهيئة الإشارات صراحةً إلى القيم المطلوبة. .P .\" يمكن إجراء التهيئة باستخدام عملية \fBsemctl\fP(2) \fBSETVAL\fP أو \fBSETALL\fP. عندما لا يعرف عدة نظراء من سيكون أول من يهيئ المجموعة، يمكن استخدام التحقق من وجود قيمة غير صفرية لـ \fIsem_otime\fP في بنية البيانات المرتبطة التي يتم استردادها بواسطة عملية \fBsemctl\fP(2) \fBIPC_STAT\fP لتجنب حالات التزاحم. .SS "حدود السيمافور" الحدود التالية على موارد مجموعة الإشارات تؤثر على استدعاء \fBsemget\fP(): .TP \fBSEMMNI\fP .\" commit e843e7d2c88b7db107a86bd2c7145dc715c058f4 .\" This /proc file is not available in Linux 2.2 and earlier -- MTK حد على مستوى النظام لعدد مجموعات الإشارات. قبل Linux 3.19، كانت القيمة المبدئية لهذا الحد 128. منذ Linux 3.19، القيمة المبدئية هي 32,000. في Linux، يمكن قراءة هذا الحد وتعديله عبر الحقل الرابع من \fI/proc/sys/kernel/sem\fP. .TP \fBSEMMSL\fP .\" commit e843e7d2c88b7db107a86bd2c7145dc715c058f4 الحد الأقصى لعدد الإشارات لكل معرف إشارة. قبل لينكس 3.19، كانت القيمة المبدئية لهذا الحد 250. منذ لينكس 3.19، القيمة المبدئية هي 32,000. على لينكس، يمكن قراءة هذا الحد وتعديله عبر الحقل الأول من \fI/proc/sys/kernel/sem\fP. .TP \fBSEMMNS\fP الحد على مستوى النظام لعدد الإشارات: يعتمد على السياسة (على لينكس، يمكن قراءة هذا الحد وتعديله عبر الحقل الثاني من \fI/proc/sys/kernel/sem\fP). لاحظ أن عدد الإشارات على مستوى النظام محدود أيضًا بحاصل ضرب \fBSEMMSL\fP و\fBSEMMNI\fP. .SH العلل ربما كان اختيار الاسم \fBIPC_PRIVATE\fP غير موفق، فاسم \fBIPC_NEW\fP كان سيظهر وظيفتها بشكل أوضح. .SH أمثلة البرنامج الموضح أدناه يستخدم \fBsemget\fP() لإنشاء مجموعة إشارات جديدة أو استرداد معرف مجموعة موجودة. يولد \fIkey\fP لـ \fBsemget\fP() باستخدام \fBftok\fP(3). تُستخدم الوسيطتان الأوليان لسطر الأوامر كوسيطتي \fIpathname\fP و\fIproj_id\fP لـ \fBftok\fP(3). الوسيطة الثالثة لسطر الأوامر هي عدد صحيح يحدد وسيطة \fInsems\fP لـ \fBsemget\fP(). يمكن استخدام خيارات سطر الأوامر لتحديد علمي \fBIPC_CREAT\fP (\fI\-c\fP) و\fBIPC_EXCL\fP (\fI\-x\fP) لاستدعاء \fBsemget\fP(). استخدام هذا البرنامج موضح أدناه. .P ننشئ أولاً ملفين سيُستخدمان لتوليد المفاتيح باستخدام \fBftok\fP(3)، وننشئ مجموعتي إشارات باستخدام هذين الملفين، ثم ندرج المجموعات باستخدام \fBipcs\fP(1): .P .in +4n .EX $\fB touch mykey mykey2\fP; $\fB ./t_semget \-c mykey p 1\fP; ID = 9 $\fB ./t_semget \-c mykey2 p 2\fP; ID = 10 $\fB ipcs \-s\fP; \& \-\-\-\-\-\- Semaphore Arrays \-\-\-\-\-\-\-\- key semid owner perms nsems 0x7004136d 9 mtk 600 1 0x70041368 10 mtk 600 2 .EE .in .P بعد ذلك، نوضح أنه عندما يُعطى \fBsemctl\fP(2) نفس \fIkey\fP (كما يُولد بواسطة نفس الوسائط لـ \fBftok\fP(3))، فإنه يعيد معرف مجموعة الإشارات الموجودة بالفعل: .P .in +4n .EX $\fB ./t_semget \-c mykey p 1\fP; ID = 9 .EE .in .P أخيرًا، نوضح نوع التصادم الذي يمكن أن يحدث عندما يُعطى \fBftok\fP(3) وسيطات \fIpathname\fP مختلفة لها نفس رقم inode: .P .in +4n .EX $\fB ln mykey link\fP; $\fB ls \-i1 link mykey\fP; 2233197 link 2233197 mykey $\fB ./t_semget link p 1\fP; # Generates same key as \[aq]mykey\[aq] ID = 9 .EE .in .SS "مصدر البرنامج" .\" SRC BEGIN (t_semget.c) \& .EX /* t_semget.c \& Licensed under GNU General Public License v2 or later. */ #include #include #include #include #include \& static void usage(const char *pname) { fprintf(stderr, "Usage: %s [\-cx] pathname proj\-id num\-sems\[rs]n", pname); fprintf(stderr, " \-c Use IPC_CREAT flag\[rs]n"); fprintf(stderr, " \-x Use IPC_EXCL flag\[rs]n"); exit(EXIT_FAILURE); } \& int main(int argc, char *argv[]) { int semid, nsems, flags, opt; key_t key; \& flags = 0; while ((opt = getopt(argc, argv, "cx")) != \-1) { switch (opt) { case \[aq]c\[aq]: flags |= IPC_CREAT; break; case \[aq]x\[aq]: flags |= IPC_EXCL; break; default: usage(argv[0]); } } \& if (argc != optind + 3) usage(argv[0]); \& key = ftok(argv[optind], argv[optind + 1][0]); if (key == \-1) { perror("ftok"); exit(EXIT_FAILURE); } \& nsems = atoi(argv[optind + 2]); \& semid = semget(key, nsems, flags | 0600); if (semid == \-1) { perror("semget"); exit(EXIT_FAILURE); } \& printf("ID = %d\[rs]n", semid); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "انظر أيضًا" \fBsemctl\fP(2), \fBsemop\fP(2), \fBftok\fP(3), \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 .