هل هناك طريقة لاستخدام Errno بأمان في تطبيق متعدد الخيوط؟ [مكرر

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

  •  19-08-2019
  •  | 
  •  

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

إذا كنت تكتب تطبيقًا متعدد الخيوط يستخدم مكالمات النظام/المكتبة التي تستخدم Errno للإشارة إلى نوع الخطأ ، هل هناك طريقة آمنة لاستخدام Errno؟ إذا لم يكن الأمر كذلك ، فهل هناك طريقة أخرى للإشارة إلى نوع الخطأ الذي حدث بدلاً من مجرد حدوث خطأ؟

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

المحلول

إذا كانت مكتبتك القياسية على دراية بمتعدد مؤشرات الترابط ، فمن المحتمل أن يكون لها ملف #define هذا يتغير errno في استدعاء دالة تقوم بإرجاع قيمة إرجاع خطأ في مؤشر الترابط المحلي. ومع ذلك ، لاستخدام هذا أنت بشكل عام يجب تضمن <errno.h>, ، بدلا من الاعتماد على extern إعلان.

لقد وجدت مقالا سلامة الموضوع و posix.1 الذي يعالج هذا السؤال بالذات.

نصائح أخرى

man errno يقول:

يتم تعريف Errno بواسطة معيار ISO C ليكون lvalue قابل للتعديل من النوع int ، ويجب عدم الإعلان عنه بشكل صريح ؛ قد يكون Errno ماكرو. errno هو الخيط المحلي. لا يؤثر إعداده في مؤشر ترابط واحد على قيمته في أي مؤشر ترابط آخر.

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