| _syscall(2) | System Calls Manual | _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
انظر أيضًا¶
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 17 مايو 2025 | صفحات دليل لينكس (لم تصدر بعد) |