سؤال

أنا أكتب خادمًا بسيطًا جدًا يتكرر إلى الأبد حتى يتم الضغط على Ctrl-C.أرغب في أن يقوم معالج الإشارة لـ ctrl-c بإغلاق المقابس المفتوحة وإيقاف الخادم، لكنني لا أعرف ما هو نطاق معالج الإشارة، ولا أحب فكرة الإعلان عن المقبس (ق) سأحتاج إلى الإغلاق لكي أكون عالميًا.

هل يمكن لشخص أن يقدم اقتراحات؟هل هناك طريقة قياسية للقيام بذلك؟

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

المحلول

حسنًا، بما أن لديك معالجات إشارة، سأفترض أنك تستخدم نسخة يونكس.لو ذلك:

  • يتم تعريف المقبس للنواة من خلال رقم الملف، وهو int.يرى socket(2).
  • هذا int صالح للعملية الخاصة بك
  • هذا int صالح لأي عمليات متشعبة بعد إنشائه
  • إذا لم تكن قريبة من التنفيذ التنفيذي، فهي صالحة لأي عملية تنفذها.

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

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

نصائح أخرى

عادةً، يُنصح بعدم القيام بأي شيء كثيرًا في معالج الإشارة؛بخلاف وضع العلم.

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

يمكن أن يتم استدعاء معالجات الإشارة في أي وقت تقريبًا، بما في ذلك في منتصف مكالمات مكتبة C أو C++، مما قد يمثل مشكلة.

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