_syscall(2)

الاسم
_syscall - استدعاء نداء نظام دون دعم مكتبة (مهجورة)

موجز
#include <linux/unistd.h>

كليَّة _syscall

نداء النظام المطلوب

الوصف
الشيء المهم معرفته عن نداء النظام هو نموذجه الأولي. تحتاج إلى معرفة عدد الوسائط وأنواعها ونوع إرجاع الدالة. هناك سبع كليَّات تُسهِّل الاستدعاء الفعلي للنظام. صيغتها كالتالي:

    _syscallX(type,name,type1,arg1,type2,arg2,...)

أين

    X هو 0–6، وهو عدد الوسائط التي يأخذها نداء النظام

    type هو نوع إرجاع نداء النظام

    name هو اسم نداء النظام

    typeN هو نوع الوسيطة رقم N

    argN هو اسم الوسيطة رقم N

تنشئ هذه الكليَّات دالة تُسمى name بالوسائط التي تحددها. بمجرد تضمين _syscall() في ملف المصدر الخاص بك، تستدعي نداء النظام باستخدام name.

الملفات
/usr/include/linux/unistd.h

المعايير
لينكس.

التاريخ
بدءًا من حوالي Linux 2.6.18، أُزيلت كليَّات _syscall من ملفات الرأس المقدمة لمساحة المستخدم. استخدم syscall(2) بدلاً من ذلك. (بعض البنى، ولا سيما ia64، لم توفر أبدًا كليَّات _syscall؛ على تلك البنى، كان syscall(2) مطلوبًا دائمًا.)

ملاحظات
كليَّات _syscall() لا تُنتج نموذجًا أوليًا. قد تحتاج إلى إنشاء واحد، خاصة لمستخدمي C++.

ليست نداءات النظام مطلوبة لإرجاع رموز خطأ موجبة أو سالبة فقط. تحتاج إلى قراءة المصدر للتأكد من كيفية إرجاع الأخطاء. عادةً، هو سالب رمز الخطأ القياسي، على سبيل المثال، -EPERM. ستعيد كليَّات _syscall() النتيجة r لنداء النظام عندما تكون r غير سالبة، لكنها ستعيد -1 وتضبط المتغير errno إلى -r عندما تكون r سالبة. لرموز الخطأ، انظر errno(3).

عند تعريف نداء نظام، يجب تمرير أنواع الوسائط بالقيمة أو بالمؤشر (للتجميعات مثل الهياكل).

أمثلة
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <linux/unistd.h>       /* for _syscallX macros/related stuff */
    #include <linux/kernel.h>       /* for struct sysinfo */

    _syscall1(int, sysinfo, struct sysinfo *, info);

    int
    main(void)
    {
        struct sysinfo s_info;
        int error;

        error = sysinfo(&s_info);
        printf("code error = %d\n", error);
        printf("Uptime = %lds\nLoad: 1 min %lu / 5 min %lu / 15 min %lu\n"
               "RAM: total %lu / free %lu / shared %lu\n"
               "Memory in buffers = %lu\nSwap: total %lu / free %lu\n"
               "Number of processes = %d\n",
               s_info.uptime, s_info.loads[0],
               s_info.loads[1], s_info.loads[2],
               s_info.totalram, s_info.freeram,
               s_info.sharedram, s_info.bufferram,
               s_info.totalswap, s_info.freeswap,
               s_info.procs);
        exit(EXIT_SUCCESS);
    }

  مخرجات نموذجية
    code error = 0
    uptime = 502034s
    Load: 1 min 13376 / 5 min 5504 / 15 min 1152
    RAM: total 15343616 / free 827392 / shared 8237056
    Memory in buffers = 5066752
    Swap: total 27881472 / free 24698880
    Number of processes = 40

انظر أيضًا
intro(2), syscall(2), errno(3)

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

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

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