.\" -*- coding: UTF-8 -*- .\" Copyright 1993, Luigi P. Bai .\" 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 shmget 2 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم shmget \- يخصص مقطع ذاكرة مشتركة من النوع System V .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBint shmget(key_t \fP\fIkey\fP\fB, size_t \fP\fIsize\fP\fB, int \fP\fIshmflg\fP\fB);\fP .fi .SH الوصف تُرجع \fBshmget\fP() معرف مقطع الذاكرة المشتركة من النوع System\ V المرتبط بقيمة الوسيط \fIkey\fP. يمكن استخدامها إما للحصول على معرف مقطع ذاكرة مشتركة تم إنشاؤه سابقًا (عندما يكون \fIshmflg\fP صفرًا ولا يحمل \fIkey\fP القيمة \fBIPC_PRIVATE\fP)، أو لإنشاء مجموعة جديدة. .P يُُنشأ مقطع ذاكرة مشتركة جديد، بحجم يساوي قيمة \fIsize\fP مقربًا لأعلى إلى مضاعف \fBPAGE_SIZE\fP، إذا كان \fIkey\fP يحمل القيمة \fBIPC_PRIVATE\fP أو لم يكن \fIkey\fP هو \fBIPC_PRIVATE\fP، ولا يوجد مقطع ذاكرة مشتركة مطابق لـ \fIkey\fP، وتم تحديد \fBIPC_CREAT\fP في \fIshmflg\fP. .P إذا حدد \fIshmflg\fP كلاً من \fBIPC_CREAT\fP و \fBIPC_EXCL\fP وكان مقطع ذاكرة مشتركة موجودًا بالفعل لـ \fIkey\fP، فإن \fBshmget\fP() تفشل مع تعيين \fIerrno\fP إلى \fBEEXIST\fP. (هذا مماثل لتأثير الدمج \fBO_CREAT | O_EXCL\fP لـ \fBopen\fP(2).) .P تتكون القيمة \fIshmflg\fP من: .TP \fBIPC_CREAT\fP إنشاء مقطع جديد. إذا لم يُستخدم هذا العلم، فسيعثر \fBshmget\fP() على المقطع المرتبط بـ \fIkey\fP ويتحقق مما إذا كان المستخدم لديه الإذن للوصول إلى المقطع. .TP \fBIPC_EXCL\fP يُستخدم هذا العلم مع \fBIPC_CREAT\fP لضمان أن هذه الاستدعاء تنشئ المقطع. إذا كان المقطع موجودًا بالفعل، تفشل الاستدعاء. .TP \fBSHM_HUGETLB\fP (منذ Linux 2.6) تخصيص المقطع باستخدام صفحات "ضخمة". راجع ملف مصدر نواة لينكس \fIDocumentation/admin\-guide/mm/hugetlbpage.rst\fP لمزيد من المعلومات. .TP \fBSHM_HUGE_2MB\fP .TQ \fBSHM_HUGE_1GB\fP (منذ Linux 3.8) .\" See https://lwn.net/Articles/533499/ يُستخدم بالتزامن مع \fBSHM_HUGETLB\fP لاختيار أحجام صفحات hugetlb بديلة (2\ ميجابايت و 1\ جيجابايت على التوالي) على الأنظمة التي تدعم أحجام صفحات hugetlb متعددة. .IP بشكل أعم، يمكن تكوين حجم الصفحة الضخمة المطلوب عن طريق ترميز اللوغاريتم ذو الأساس 2 لحجم الصفحة المطلوب في البتات الستة عند الإزاحة \fBSHM_HUGE_SHIFT\fP. وبالتالي، يتم تعريف الثابتين أعلاه على النحو التالي: .IP .in +4n .EX #define SHM_HUGE_2MB (21 << SHM_HUGE_SHIFT) #define SHM_HUGE_1GB (30 << SHM_HUGE_SHIFT) .EE .in .IP لمزيد من التفاصيل الإضافية، راجع مناقشة الثوابت المسماة بالمثل في \fBmmap\fP(2). .TP \fBSHM_NORESERVE\fP (منذ Linux 2.6.15) .\" As at 2.6.17-rc2, this flag has no effect if SHM_HUGETLB was also .\" specified. يخدم هذا العلم نفس الغرض الذي يخدمه علم \fBMAP_NORESERVE\fP في \fBmmap\fP(2). لا تحجز مساحة مبادلة لهذا المقطع. عند حجز مساحة المبادلة، يكون لديك ضمان بإمكانية تعديل المقطع. عندما لا تُحجز مساحة المبادلة، قد تحصل على \fBSIGSEGV\fP عند الكتابة إذا لم تكن ذاكرة فيزيائية متاحة. راجع أيضًا مناقشة الملف \fI/proc/sys/vm/overcommit_memory\fP في \fBproc_sys_vm\fP(5). .P بالإضافة إلى الأعلام أعلاه، تحدد أقل 9 بتات أهمية من \fIshmflg\fP الأذونات الممنوحة للمالك والمجموعة والآخرين. لهذه البتات نفس التنسيق ونفس المعنى مثل وسيط \fImode\fP لـ \fBopen\fP(2). حاليًا، لا يستخدم النظام أذونات التنفيذ. .P عند إنشاء مقطع ذاكرة مشتركة جديد، تتم تهيئة محتوياته إلى قيم صفرية، ويتم تهيئة بنية البيانات المرتبطة به، \fIshmid_ds\fP (انظر \fBshmctl\fP(2))، على النحو التالي: .IP \[bu] 3 يتم تعيين \fIshm_perm.cuid\fP و \fIshm_perm.uid\fP إلى معرف المستخدم الفعّال للعملية المستدعية. .IP \[bu] يتم تعيين \fIshm_perm.cgid\fP و \fIshm_perm.gid\fP إلى معرف المجموعة الفعّال للعملية المستدعية. .IP \[bu] يتم تعيين أقل 9 بتات أهمية من \fIshm_perm.mode\fP إلى أقل 9 بتات أهمية من \fIshmflg\fP. .IP \[bu] يتم تعيين \fIshm_segsz\fP إلى قيمة \fIsize\fP. .IP \[bu] يتم تعيين \fIshm_lpid\fP و \fIshm_nattch\fP و \fIshm_atime\fP و \fIshm_dtime\fP إلى 0. .IP \[bu] يتم تعيين \fIshm_ctime\fP إلى الوقت الحالي. .P إذا كان مقطع الذاكرة المشتركة موجودًا بالفعل، يتم التحقق من الأذونات، ويتم إجراء فحص لمعرفة ما إذا كان مُعلّمًا للتدمير. .SH "قيمة الإرجاع" عند النجاح، يتم إرجاع معرف ذاكرة مشتركة صالح. عند الخطأ، يتم إرجاع \-1، ويتم تعيين \fIerrno\fP للإشارة إلى الخطأ. .SH الأخطاء .TP \fBEACCES\fP المستخدم لا يملك صلاحية الوصول إلى قطعة الذاكرة المشتركة، ولا يملك القدرة \fBCAP_IPC_OWNER\fP في نطاق المستخدم الذي يحكم نطاق IPC الخاص به. .TP \fBEEXIST\fP تم تحديد \fBIPC_CREAT\fP و \fBIPC_EXCL\fP في \fIshmflg\fP، ولكن قطعة ذاكرة مشتركة موجودة بالفعل للمفتاح \fIkey\fP. .TP \fBEINVAL\fP كان من المقرر إنشاء قطعة جديدة و \fIsize\fP أقل من \fBSHMMIN\fP أو أكبر من \fBSHMMAX\fP. .TP \fBEINVAL\fP توجد قطعة للمفتاح \fIkey\fP المعطى، ولكن \fIsize\fP أكبر من حجم تلك القطعة. .TP \fBENFILE\fP .\" [2.6.7] shmem_zero_setup()-->shmem_file_setup()-->get_empty_filp() وُصل إلى الحد الأقصى لإجمالي عدد الملفات المفتوحة على مستوى النظام. .TP \fBENOENT\fP لا توجد قطعة للمفتاح \fIkey\fP المعطى، ولم يتم تحديد \fBIPC_CREAT\fP. .TP \fBENOMEM\fP لا يمكن تخصيص ذاكرة للنفقات العامة للقطعة. .TP \fBENOSPC\fP تم أخذ جميع معرفات الذاكرة المشتركة الممكنة (\fBSHMMNI\fP)، أو تخصيص قطعة بالحجم \fIsize\fP المطلوب سيتسبب في تجاوز النظام للحد النظامي على الذاكرة المشتركة (\fBSHMALL\fP). .TP \fBEPERM\fP تم تحديد العلم \fBSHM_HUGETLB\fP، ولكن المتصل لم يكن متميزًا (لم يملك القدرة \fBCAP_IPC_LOCK\fP) وليس عضوًا في مجموعة \fIhugetlb_shm_group\fP؛ انظر وصف \fI/proc/sys/vm/hugetlb_shm_group\fP في \fBproc_sys_vm\fP(5). .SH المعايير POSIX.1\-2024. .P \fBSHM_HUGETLB\fP و \fBSHM_NORESERVE\fP هما امتدادات لينكس. .SH التاريخ .\" SVr4 documents an additional error condition EEXIST. POSIX.1\-2001، SVr4. .SH ملاحظات .\" \fBIPC_PRIVATE\fP ليس حقل علم بل نوع \fIkey_t\fP. إذا تم استخدام هذه القيمة الخاصة لـ \fIkey\fP، تتجاهل استدعاء النظام كل شيء باستثناء أقل 9 بتات أهمية من \fIshmflg\fP وتنشئ قطعة ذاكرة مشتركة جديدة. .SS "حدود الذاكرة المشتركة" الحدود التالية على موارد قطعة الذاكرة المشتركة تؤثر على استدعاء \fBshmget\fP() : .TP \fBSHMALL\fP الحد النظامي على إجمالي كمية الذاكرة المشتركة، مقاسًا بوحدات حجم صفحة النظام. .IP .\" commit 060028bac94bf60a65415d1d55a359c3a17d5c31 في لينكس، يمكن قراءة هذا الحد وتعديله عبر \fI/proc/sys/kernel/shmall\fP. منذ لينكس 3.16، القيمة المبدئية لهذا الحد هي: .IP .in +4n .EX ULONG_MAX \- 2\[ha]24 .EE .in .IP تأثير هذه القيمة (المناسبة لكل من الأنظمة 32\-بت و 64\-بت) هو عدم فرض أي قيود على التخصيصات. تم اختيار هذه القيمة، بدلاً من \fBULONG_MAX\fP، كقيمة مبدئية لمنع بعض الحالات حيث رفعت التطبيقات التاريخية الحد الحالي ببساطة دون التحقق أولاً من قيمته الحالية. مثل هذه التطبيقات ستتسبب في تجاوز القيمة إذا تم تعيين الحد عند \fBULONG_MAX\fP. .IP من لينكس 2.4 حتى لينكس 3.15، كانت القيمة المبدئية لهذا الحد: .IP .in +4n .EX SHMMAX / PAGE_SIZE * (SHMMNI / 16) .EE .in .IP إذا لم يتم تعديل \fBSHMMAX\fP و \fBSHMMNI\fP، فإن ضرب نتيجة هذه الصيغة بحجم الصفحة (للحصول على قيمة بالبايت) ينتج قيمة 8\ جيجابايت كحد على إجمالي الذاكرة المستخدمة بواسطة جميع قطع الذاكرة المشتركة. .TP \fBSHMMAX\fP الحد الأقصى للحجم بالبايت لقطعة ذاكرة مشتركة. .IP .\" commit 060028bac94bf60a65415d1d55a359c3a17d5c31 في لينكس، يمكن قراءة هذا الحد وتعديله عبر \fI/proc/sys/kernel/shmmax\fP. منذ لينكس 3.16، القيمة المبدئية لهذا الحد هي: .IP .in +4n .EX ULONG_MAX \- 2\[ha]24 .EE .in .IP تأثير هذه القيمة (المناسبة لكل من الأنظمة 32\-بت و 64\-بت) هو عدم فرض أي قيود على التخصيصات. انظر وصف \fBSHMALL\fP لمناقشة سبب استخدام هذه القيمة المبدئية (بدلاً من \fBULONG_MAX\fP). .IP من لينكس 2.2 حتى لينكس 3.15، كانت القيمة المبدئية لهذا الحد 0x2000000 (32\ ميجابايت). .IP لأنه ليس من الممكن تعيين جزء فقط من قطعة ذاكرة مشتركة، تضع كمية الذاكرة الافتراضية حدًا آخر على الحجم الأقصى لقطعة قابلة للاستخدام: على سبيل المثال، على i386 أكبر القطع التي يمكن تعيينها يبلغ حجمها حوالي 2.8\ جيجابايت، وعلى x86\-64 الحد حوالي 127 تيرابايت. .TP \fBSHMMIN\fP الحد الأدنى للحجم بالبايت لقطعة ذاكرة مشتركة: يعتمد على التنفيذ (حاليًا 1 بايت، على الرغم من أن \fBPAGE_SIZE\fP هو الحد الأدنى الفعلي). .TP \fBSHMMNI\fP الحد النظامي على عدد قطع الذاكرة المشتركة. في لينكس 2.2، كانت القيمة المبدئية لهذا الحد 128؛ منذ لينكس 2.4، القيمة المبدئية هي 4096. .IP .\" Kernels between Linux 2.4.x and Linux 2.6.8 had an off-by-one error .\" that meant that we could create one more segment than SHMMNI -- MTK .\" This /proc file is not available in Linux 2.2 and earlier -- MTK في لينكس، يمكن قراءة هذا الحد وتعديله عبر \fI/proc/sys/kernel/shmmni\fP. .P لا يحتوي التطبيق على حدود محددة للعدد الأقصى لقطاعات الذاكرة المشتركة لكل عملية (\fBSHMSEG\fP). .SS "ملاحظات لينكس" حتى لينكس 2.3.30، كان لينكس يُرجع \fBEIDRM\fP لاستدعاء \fBshmget\fP() على قطاع ذاكرة مشتركة مجدول للحذف. .SH العلل ربما كان اختيار الاسم \fBIPC_PRIVATE\fP غير موفق، فاسم \fBIPC_NEW\fP كان سيظهر وظيفتها بشكل أوضح. .SH أمثلة انظر \fBshmop\fP(2). .SH "انظر أيضًا" \fBmemfd_create\fP(2)، \fBshmat\fP(2)، \fBshmctl\fP(2)، \fBshmdt\fP(2)، \fBftok\fP(3)، \fBcapabilities\fP(7)، \fBshm_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 .