ما الفرق بين "مكالمات النظام C" و "إجراءات مكتبة C"؟

StackOverflow https://stackoverflow.com/questions/572942

  •  05-09-2019
  •  | 
  •  

سؤال

هناك أقسام متعددة في manpages. اثنان منهم:

2 نظام UNIX و C يدعو إجراءات مكتبة 3 ج

على سبيل المثال هناك getmntinfo(3) و getfsstat(2), ، كلاهما يبدو وكأنهم يفعلون نفس الشيء. متى يجب استخدام واحد وما هو الفرق؟

هل كانت مفيدة؟

المحلول

مكالمات النظام هي وظائف نظام التشغيل، مثل UNIX، malloc() وظيفة بنيت على رأس sbrk() مكالمة النظام (لتغيير حجم مساحة ذاكرة العملية).

تعد المكتبات مجرد رمز التطبيق غير جزء من نظام التشغيل وغالبا ما تكون متوفرة في أكثر من نظام التشغيل. إنها في الأساس نفس الدالة المكالمات داخل البرنامج الخاص بك.

يمكن أن يكون الخط ضبابية صغيرة ولكن فقط عرض مكالمات النظام كوظائف مستوى kernel.

نصائح أخرى

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

فيما يتعلق به واحد لاستخدامه، كقاعدة عامة، استخدم الشخص الذي يناسب احتياجاتك.

يتم بناء مكتبات الوظائف الشائعة أعلى واجهة استدعاء النظام، ولكن التطبيقات مجانية لاستخدام كليهما.

مكالمات النظام هي مثل مفاتيح المصادقة التي لديها الوصول لاستخدام موارد kernel.

enter image description here

الصورة أعلاه هي من برمجة Linux المتقدمة وتساعد على فهم كيفية تفاعل تطبيقات المستخدم مع Kernel.

تتمثل المكالمات الموضحة في القسم 2 من الدليل كلها باهتة رفيعة نسبيا حول المكالمات الفعلية لخدمات النظام التي فخ النواة. إن إجراءات مكتبة C قياسية C الموصوفة في القسم 3 من الدليل هي وظائف مكتبة جانب العميل التي قد تستخدم أو لا تستخدم بالفعل مكالمات النظام.

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

كقاعدة عامة، يجب عليك دائما استخدام إصدار مكتبة C. غالبا ما يكون لديهم مغلفة تعاملون مع الأشياء الباطنية مثل إعادة التشغيل على إشارة (إذا طلبت ذلك). هذا صحيح بشكل خاص إذا كنت مرتبطا بالفعل بالمكتبة. جميع القواعد لها أسباب ليتم كسرها. أسباب استخدام المكالمات المباشرة،

  1. تريد ان تكون libc محايد دينيا؛ ربما مع المثبت. يمكن تشغيل هذا الرمز على نظام Android (بيونيتش), UCLIBC., والمزيد من أنظمة Glibc / EGLIBC تقليدية، بغض النظر عن المكتبة المستخدمة. أيضا، التحميل الديناميكي مع الأغلفة لإجراء وقت التشغيل Glibc / Bionic يسمح بدفع ثنائي Android / Linux المزدوج.
  2. تحتاج إلى أداء شديد. على الرغم من أن هذا ربما نادر على الأرجح وغير المرجح. ربما إعادة التفكير في المشكلة سوف تعطي فوائد أفضل أداء و ليس استدعاء النظام غالبا ما يفوز في الأداء، والذي libc يمكن أن تفعل من حين لآخر.
  3. أنت تكتب بعض initramfs أو init رمز بدون مكتبة؛ لإنشاء صورة أصغر أو تمهيد أسرع.
  4. أنت تقوم باختبار Kernel / منصة جديدة ولا ترغب في تعقيد الحياة مع نظام ملفات ملفوف كامل؛ مشابهة جدا ل initramfs.
  5. كنت ترغب في القيام بشيء بسرعة كبيرة في بدء تشغيل البرنامج، ولكن في نهاية المطاف تريد استخدام libc الروتين.
  6. لتجنب الخلل المعروف في libc.
  7. الوظيفة غير متوفرة من خلال libc.

عذرا، فإن معظم الأمثلة هي Linux محددة، ولكن يجب أن تنطبق العقلانية على متغيرات UNIX الأخرى. العنصر الأخير شائع جدا عندما يتم تقديم ميزات جديدة في نواة. على سبيل المثال متى kqueue أو epoll حيث قدمت لأول مرة، لم يكن هناك libc لدعمها. قد يحدث هذا أيضا إذا كان النظام يحتوي على مكتبة قديمة، ولكن Kernel أحدث وأتمنى استخدام هذه الوظيفة.

إذا لم تستخدم العملية الخاصة بك libc, ، من المرجح أن يكون هناك شيء في النظام. من خلال ترميز المتغيرات الخاصة بك، يمكنك نفي ذاكرة التخزين المؤقت من خلال توفير مسارين لنفس الهدف النهائي. أيضا، سيقوم UNIX بمشاركة صفحات التعليمات البرمجية بين العمليات. عموما لا يوجد سبب لعدم استخدام libc الإصدار.

وقد فعلت إجابات أخرى بالفعل وظيفة ممتازة في الفرق بين libc ومكالمات النظام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top