ما هي مكالمة النظام في Linux وكيف تعمل مع الأمثلة

What Is System Call Linux



استدعاء النظام هو وظيفة تسمح للعملية بالاتصال بنواة Linux. إنها مجرد طريقة برمجية لبرنامج كمبيوتر لطلب منشأة من نواة نظام التشغيل. تعرض مكالمات النظام موارد نظام التشغيل لبرامج المستخدم من خلال API (واجهة برمجة التطبيقات). يمكن لمكالمات النظام الوصول إلى إطار عمل kernel فقط. هناك حاجة إلى مكالمات النظام لجميع الخدمات التي تحتاج إلى موارد.

Linux kernel هو برنامج احتكاري يتم تحميله وتشغيله على الجهاز في المرحلة المحتملة على الأقل. وتتمثل مهمتها في تنظيم كل ما يحدث على الجهاز ، من لوحة المفاتيح ومحرك الأقراص وأحداث الشبكة إلى توفير شرائح زمنية للتنفيذ المتزامن للبرامج المختلفة. يؤدي الفصل بين البرامج والأجهزة إلى إنشاء فقاعة آمنة تعمل على تحسين الحماية والموثوقية. لا تستطيع التطبيقات غير المتميزة الوصول إلى مساحة تخزين البرنامج الآخر ، وإذا فشل أحدها ، فإن kernel يوقف العملية بحيث لا تتلف النظام بأكمله.







غلاف الرقائق الرقيق:

لا يتم تقديم استدعاءات نظام Linux صراحةً إلى النواة في بعض البرامج. تستخدم جميع البرامج تقريبًا مكتبة C الأساسية وتقدم غلافًا خفيف الوزن ولكنه أساسي على مكالمات نظام Linux. يوفر المستودع بعد ذلك استدعاء جهاز Linux المصاحب بعد التأكد من ترجمة معلمات الميزة إلى سجلات المعالج الصحيحة. عندما يتلقى الغلاف بيانات من استدعاء النظام ، يقوم بتحليلها ويساهم في البرنامج بشكل واضح. يتم تحويل أي عملية تفاعلية للآلة في برنامج في النهاية إلى استدعاء نظام. لذا ، دعونا نلقي نظرة على بعضها. هناك قائمة طويلة من مكالمات نظام Linux التي يمكننا استخدامها في نظام Linux الخاص بنا. فيما يلي قائمة ببعض مكالمات نظام Linux الشائعة والمستخدمة في الغالب.



  • افتح
  • قريب
  • إكسيك
  • اكتب
  • يقرأ
  • Lseek
  • يختار

دعنا نناقش بعض مكالمات نظام Linux باستخدام لغة C في مقالتنا للحصول على تدريب عملي عليها.



فتح استدعاء النظام:

يمكننا استخدام استدعاء النظام المفتوح في توزيع Linux الخاص بنا لفتح المستند بسرعة ، والذي سنحدده في كود لغة C. قم بتشغيل محطة الأوامر أولاً. يمكنك استخدام الاختصار Ctrl + Alt + T. افترض أن لديك ملفًا نصيًا test.txt في الدليل الرئيسي ، ويحتوي على بعض المحتوى فيه. لذلك ، في البداية ، يجب عليك إنشاء اسم ملف جديد من نوع C new.c في الجهاز عبر محرر nano. لذلك ، جرب تعليمات النانو البسيطة أدناه.





$نانوجديد ج

الآن ، تم إطلاق محرر Nano. اكتب الرمز الموضح أدناه فيه. لدينا اثنين من واصفات الملف في الكود. يمكن فتح كلا الملفين باستخدام استدعاء النظام المفتوح. يحتوي الواصف الأول على مكالمة قراءة ، ويحتوي الثاني على وظيفة الكتابة. أول مكالمة مفتوحة هي فتح الملف النصي test.txt وحفظ محتواه في واصف الملف fd. استدعاء النظام المفتوح الثاني هو إنشاء ملف باسم الهدف. تم تعويض هدف المستند إلى واصف ملف fd1. يتم استخدام تعليمات الكتابة لنسخ بايت البيانات في المخزن المؤقت. اضغط على Ctrl + S لحفظ الكود واضغط على مفتاح الاختصار Ctrl + X لإنهاء الملف.



قم بتشغيل تعليمات التحويل البرمجي gcc لتجميع كود C هذا.

$مجلس التعاون الخليجيجديد ج

دعنا ننفذ الكود باستخدام استعلام a.out البسيط في الصدفة كما يلي:

$./أ. خارج

تم إرسال بيانات الإخراج إلى الملف الهدف. دعونا نتحقق من الملف الهدف باستخدام استعلام القط. تعرض شاشة الإخراج البيانات المكونة من 20 حرفًا في الملف الهدف.

$قطاستهداف

استدعاء نظام Exec:

يتم الآن استبعاد استدعاء نظام exec لتشغيل ملف قيد المعالجة حاليًا. يتم استبدال الملف القابل للتنفيذ السابق ، ويتم تشغيل الملف الحالي متى تم استدعاء exec. باستخدام استدعاء نظام exec ، قد نفترض أن القيام بذلك سيؤدي إلى استبدال المستند أو التطبيق القديم في الحلقة بآخر جديد. يتم استخدام برنامج جديد لتجاوز مادة العملية برمتها. المستند الذي ورد عنوانه في البيان كلما تم استدعاء exec () يتم استبداله بقسم معلومات المستخدم الذي يدير استدعاء النظام exec (). لذا افتح محطة الأوامر ، وباستخدام محرر nano ، أنشئ ملفًا جديدًا من نوع C على النحو التالي:

$نانوإكسب

تم فتح المحرر الآن. اكتب كود لغة سي أدناه بالكامل. هناك ثلاث مكتبات رئيسية مدرجة فيه. بعد ذلك ، تم إنشاء الوظيفة الرئيسية. يعرض بيان الطباعة بيانات السلسلة ومعرف العملية للملف exp.c. تم استخدام وظيفة getpid () لهذا الغرض. ثم لدينا مصفوفة من نوع الأحرف بها بعض القيم. تم استخدام استدعاء نظام exec لأخذ اسم الملف والمصفوفة المكونة من سطر واحد أعلاه كوسيطة. الآن سيتم معالجة الملف hello.c. بعد ذلك ، يأتي بيان print آخر حتى الآن ، لكنه لن يتم تنفيذه أبدًا. اضغط على Ctrl + S لحفظ هذا الملف. اضغط على Ctrl + X للخروج.

حان الوقت الآن لإنشاء ملف c آخر ، hello.c باستخدام محرر nano. استخدم الاستعلام أدناه في الصدفة للقيام بذلك.

$نانومرحبًا ج

اكتب الكود أدناه فيه. يحتوي هذا الرمز على عبارتين للطباعة في الوظيفة الرئيسية. الأول هو طباعة السلسلة الواردة فيه فقط ، والثاني يطبع السلسلة أثناء جلب معرف العملية للملف المستخدم حاليًا ، وهو hello.c.

فلنجمع كلا الملفين واحدًا تلو الآخر باستخدام مجلس التعاون الخليجي.

$مجلس التعاون الخليجي–o exp.c

$مجلس التعاون الخليجي- مرحبا مرحبا

عندما نقوم بتنفيذ ملف exp.c ، فإنه سيخرج أول بيان طباعة من ملف exp.c وكلا سطري الطباعة من ملف hello.c.

$./إكسب

استنتاج:

لقد شرحنا المفهوم الكامل لاستدعاءات نظام Linux وكيف يمكن استخدامها في نظام Linux الخاص بك. لقد استخدمنا Ubuntu 20.04 أثناء تنفيذ هذا المفهوم.