brk(2)

الاسم
brk, sbrk - تغيير حجم مقطع البيانات

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <unistd.h>

int brk(void *addr);
void *sbrk(intptr_t increment);

    متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

brk()، sbrk()():
    Since glibc 2.19:
        _DEFAULT_SOURCE
            || ((_XOPEN_SOURCE >= 500) &&
                ! (_POSIX_C_SOURCE >= 200112L))
    From glibc 2.12 to glibc 2.19:
        _BSD_SOURCE || _SVID_SOURCE
            || ((_XOPEN_SOURCE >= 500) &&
                ! (_POSIX_C_SOURCE >= 200112L))
    Before glibc 2.12:
        _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500

الوصف
تغير brk() و sbrk() موقع فاصل البرنامج، الذي يحدد نهاية مقطع بيانات العملية (أي فاصل البرنامج هو أول موقع بعد نهاية مقطع البيانات غير المهيأ). زيادة فاصل البرنامج لها تأثير تخصيص ذاكرة للعملية؛ تقليل الفاصل يلغي تخصيص الذاكرة.

تضبط brk() نهاية مقطع البيانات إلى القيمة المحددة بواسطة addr، عندما تكون تلك القيمة معقولة، ويكون لدى النظام ذاكرة كافية، ولا تتجاوز العملية حجم بياناتها الأقصى (انظر setrlimit(2)).

تزيد sbrk() مساحة بيانات البرنامج بمقدار increment بايت. يمكن استخدام استدعاء sbrk() مع increment بقيمة 0 لإيجاد الموقع الحالي لفاصل البرنامج.

قيمة الإرجاع
عند النجاح، ترجع brk() صفرًا. عند الخطأ، تُرجع -1، ويُضبط errno إلى ENOMEM.

عند النجاح، ترجع sbrk() فاصل البرنامج السابق. (إذا زيد الفاصل، فإن هذه القيمة هي مؤشر إلى بداية الذاكرة المخصصة حديثًا). عند الخطأ، تُرجع (void *) -1، ويُضبط errno إلى ENOMEM.

المعايير
لا شيء.

التاريخ
4.3BSD؛ SUSv1، موسوم بـ LEGACY في SUSv2، أزيل في POSIX.1-2001.

ملاحظات
تجنب استخدام brk() و sbrk(): حزمة تخصيص الذاكرة malloc(3) هي الطريقة المحمولة والمريحة لتخصيص الذاكرة.

تستخدم أنظمة مختلفة أنواعًا مختلفة لوسيطة sbrk(). الشائعة هي int، ssize_t، ptrdiff_t، intptr_t.

  الاختلافات بين مكتبة C والنواة
قيمة الإرجاع الموصوفة أعلاه لـ brk() هي السلوك الذي توفره دالة الغلاف glibc لاستدعاء نظام Linux brk(). (في معظم التطبيقات الأخرى، قيمة الإرجاع من brk() هي نفسها؛ هذه القيمة حددت أيضًا في SUSv2.) ومع ذلك، فإن استدعاء نظام Linux الفعلي يُرجع فاصل البرنامج الجديد عند النجاح. عند الفشل، يُرجع استدعاء النظام الفاصل الحالي. تقوم دالة الغلاف glibc ببعض العمل (أي تتحقق مما إذا كان الفاصل الجديد أقل من addr) لتوفير قيم الإرجاع 0 و -1 الموصوفة أعلاه.

على Linux، تُنفذ sbrk() كدالة مكتبة تستخدم استدعاء النظام brk()، وتقوم ببعض المحاسبة الداخلية لتتمكن من إرجاع قيمة الفاصل القديمة.

انظر أيضًا
execve(2)، getrlimit(2)، end(3)، malloc(3)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.