errno.h
<errno.h> هو ملف رأس في المكتبة القياسية للغة البرمجة C. يُعرّف هذا الملف وحدات ماكرو للإبلاغ عن حالات الخطأ واسترجاعها باستخدام الرمزerrno(اختصارًا لـ "رقم الخطأ"). [ 1 ]
errnoيتصرف هذا المتغير كمتغير عدد صحيح. تقوم errnoبعض دوال المكتبة بتخزين قيمة (رقم الخطأ) فيه عند اكتشافها للأخطاء. عند بدء تشغيل البرنامج، تكون القيمة المخزنة صفرًا. لا تخزن دوال المكتبة إلا القيم الأكبر من الصفر. يمكن لأي دالة مكتبة تغيير القيمة المخزنة قبل الإرجاع، سواءً اكتشفت أخطاءً أم لا. [ 2 ] تشير معظم الدوال إلى اكتشافها خطأً بإرجاع قيمة خاصة، عادةً NULL للدوال التي تُرجع مؤشرات ، و -1 للدوال التي تُرجع أعدادًا صحيحة. تتطلب بعض الدوال من المُستدعي ضبط القيمة مسبقًا على الصفر ثم اختبارها لاحقًا لمعرفة ما إذا تم اكتشاف خطأ.errno
errnoيتوسع الماكرو إلى قيمة قابلة للتعديل من النوع int، وأحيانًا مع مُحدِّدات النوع externو/أو volatileاعتمادًا على النظام الأساسي. [ 3 ] في الأصل، كان هذا موقعًا ثابتًا في الذاكرة، ولكن تُستخدم الماكرو اليوم بشكل شبه دائم للسماح بتعدد الخيوط ، بحيث يرى كل خيط رقم خطأ محلي خاص به .
يُعرّف ملف الرأس أيضًا وحدات ماكرو تتوسع إلى ثوابت عددية صحيحة تُمثل رموز الخطأ. لا تتطلب مكتبة C القياسية سوى تعريف ثلاثة منها: [ 2 ]
| إيدوم | كان أحد المعاملات خارج نطاق الدالة، على سبيل المثالsqrt(-1) |
| برتقالي | نتيجة خارج نطاق الدالة، على سبيل المثال على الأنظمة ذات عرض 32 بتstrtol("0xfffffffff",NULL,0)long |
| إيلسك | (مطلوب منذ التعديل 1 لعام 1994 لمعيار C89) [ 4 ] تسلسل بايت غير قانوني، على سبيل المثال على الأنظمة التي تستخدم UTF-8 .mbstowcs(buf,"\xff",1) |
تتضمن أنظمة التشغيل المتوافقة مع معيار POSIX، مثل AIX و Linux و Solaris ، العديد من قيم الأخطاء الأخرى، والتي يُستخدم الكثير منها بشكل أكثر شيوعًا من القيم المذكورة أعلاه، مثل EACCESالخطأ الذي يُشير إلى تعذر فتح ملف للقراءة. [ 5 ] كما يُعرّف معيار C++11 العديد من القيم نفسها الموجودة في مواصفات POSIX. [ 6 ]
تقليديًا، تسرد الصفحة الأولى من أدلة أنظمة يونكس ، المسماة intro(2)، جميع وحدات الماكرو errno.h، ولكن هذا ليس هو الحال مع لينكس ، حيث يتم سرد وحدات الماكرو هذه بدلاً من ذلك في errno(3). [ 7 ]
يمكن ترجمة `an` errnoإلى سلسلة وصفية باستخدام `strerror` (المُعرّفة في <string.h> ) أو امتداد BSD يُسمى `perror` . ويمكن طباعة الترجمة مباشرةً إلى دفق الخطأ القياسي باستخدام `perror` (المُعرّفة في <stdio.h> ). ولأن ` perror` غير آمنة للاستخدام في بيئات متعددة الخيوط في العديد من أنظمة يونكس، يتم استخدام نسخة آمنة للاستخدام في بيئات متعددة الخيوط، ولكن تعارض التعريفات بين POSIX وGNU يجعلها أقل قابلية للنقل من الجدول. [ 8 ]sys_errliststrerrorstrerror_rsys_errlist
أخطاء POSIX
توفر مكتبة GNU C (GLIBC) وحدات الماكرو الإضافية لقيم أخطاء POSIX في ملف الرأس <errno.h> . [ 9 ] هذه هي أوصاف وحدات الماكرو التي توفرها دالة strerror . [ 10 ]
| رمز | القيمة [ 11 ] | وصف |
|---|---|---|
| EPERM | 1 | العملية غير مسموحة |
| إينوينت | 2 | لا يوجد ملف أو دليل بهذا الاسم |
| بحث | 3 | لا توجد عملية من هذا القبيل |
| مدخل | 4 | انقطاع مكالمة النظام |
| EIO | 5 | خطأ في الإدخال/الإخراج |
| إنكسيو | 6 | لا يوجد جهاز أو عنوان بهذا الاسم |
| E2BIG | 7 | قائمة الحجج طويلة جدًا |
| إينو إكسيك | 8 | خطأ في تنسيق الملف التنفيذي |
| EBADF | 9 | واصف ملف غير صالح |
| طفل | 10 | لا توجد عمليات فرعية |
| مرة أخرى | 11 | المورد غير متاح مؤقتًا |
| إينوميم | 12 | لا يمكن تخصيص الذاكرة |
| الوصول | 13 | تم رفض الإذن |
| خطأ إلكتروني | 14 | عنوان خاطئ |
| ENOTBLK | 15 | جهاز حظر مطلوب |
| إيبوسي | 16 | الجهاز أو المورد مشغول |
| موجود | 17 | الملف موجود |
| EXDEF | 18 | رابط غير صالح بين الأجهزة |
| إينوديف | 19 | لا يوجد جهاز من هذا القبيل |
| ENOTDIR | 20 | ليس دليلاً |
| EISDIR | 21 | هو دليل |
| باطلة | 22 | حجة غير صالحة |
| ملف | 23 | عدد كبير جدًا من الملفات المفتوحة في النظام |
| ملف | 24 | عدد كبير جدًا من الملفات المفتوحة |
| ENOTTY | 25 | أمر ioctl غير مناسب للجهاز |
| ETXTBSY | 26 | ملف نصي مشغول |
| إف بي آي جي | 27 | حجم الملف كبير جدًا |
| إينوسبك | 28 | لا توجد مساحة متبقية على الجهاز |
| إسبايب | 29 | البحث غير القانوني |
| EROFS | 30 | نظام ملفات للقراءة فقط |
| إم لينك | 31 | روابط كثيرة جداً |
| إيبيب | 32 | أنبوب مكسور |
| إيدوم | 33 | حجة عددية خارج النطاق |
| برتقالي | 34 | النتيجة العددية خارج النطاق |
| EDEADLK | 35 | تم تجنب حالة الجمود في الموارد |
| أداة مينا طويلة | 36 | اسم الملف طويل جدًا |
| إينولك | 37 | لا توجد أقفال متاحة |
| إينوسيس | 38 | لم يتم تنفيذ الوظيفة |
| إينوتيمبتي | 39 | الدليل غير فارغ |
| إيلوب | 40 | مستويات كثيرة جداً من الروابط الرمزية |
| إينومسج | 42 | لا توجد رسالة من النوع المطلوب |
| EIDRM | 43 | تمت إزالة المعرّف |
| ECHRNG | 44 | رقم القناة خارج النطاق |
| EL2NSYNC | 45 | المستوى 2 غير متزامن |
| EL3HLT | 46 | تم إيقاف المستوى 3 |
| EL3RST | 47 | إعادة ضبط المستوى 3 |
| الحرس الوطني للحرس الوطني | 48 | رقم الرابط خارج النطاق |
| إيوناش | 49 | لم يتم إرفاق برنامج تشغيل البروتوكول |
| إينوكسي | 50 | لا يوجد هيكل CSI متاح |
| EL2HLT | 51 | تم إيقاف المستوى 2 |
| إيباد | 52 | عملية تبادل غير صالحة |
| إيبادر | 53 | وصف طلب غير صالح |
| كامل | 54 | استبدال كامل |
| إينوانو | 55 | بدون قطب موجب |
| EBADRQC | 56 | رمز طلب غير صالح |
| EBADSLT | 57 | خانة غير صالحة |
| EBFONT | 59 | تنسيق ملف خط غير صالح |
| إينوستر | 60 | الجهاز ليس بثًا |
| بيانات إلكترونية | 61 | لا توجد بيانات متاحة |
| الوقت | 62 | انتهى المؤقت |
| ENOSR | 63 | موارد خارج التدفقات |
| إينونيت | 64 | الجهاز غير متصل بالشبكة |
| ENOPKG | 65 | لم يتم تثبيت الحزمة |
| إي ريموت | 66 | الكائن بعيد |
| إنولينك | 67 | تم قطع الاتصال |
| فيروس التهاب الدماغ الخيلي الشرقي | 68 | خطأ في الإعلان |
| ESRMNT | 69 | خطأ في Srmount |
| التجارة الإلكترونية | 70 | حدث خطأ في الاتصال أثناء الإرسال |
| إيبروتو | 71 | خطأ في البروتوكول |
| القفزات المتعددة | 72 | محاولة القفز المتعدد |
| إيدوت دوت | 73 | خطأ خاص بنظام RFS |
| EBADMSG | 74 | رسائل سيئة |
| فيضان | 75 | القيمة كبيرة جدًا بحيث لا يمكن تخزينها في نوع البيانات |
| إينوتونيك | 76 | الاسم غير فريد على الشبكة |
| EBADFD | 77 | واصف الملف في حالة سيئة |
| EREMCHG | 78 | تم تغيير عنوان الجهاز البعيد |
| إيليباك | 79 | لا يمكن الوصول إلى مكتبة مشتركة مطلوبة |
| إليباد | 80 | الوصول إلى مكتبة مشتركة تالفة |
| ELIBSCN | 81 | قسم .lib في ملف a.out تالف |
| ELIBMAX | 82 | محاولة الربط بالعديد من المكتبات المشتركة |
| ELIBEXEC | 83 | لا يمكن تنفيذ مكتبة مشتركة بشكل مباشر |
| إيلسك | 84 | تسلسل بايت غير قانوني |
| إعادة التشغيل | 85 | يجب إعادة تشغيل استدعاء النظام الذي تمت مقاطعته |
| ESTRPIPE | 86 | خطأ في تدفق البيانات |
| مستخدمون | 87 | عدد المستخدمين كبير جدًا |
| إينوتسوك | 88 | تشغيل المقبس على أجهزة غير مزودة بمقبس |
| EDESTADDRREQ | 89 | عنوان الوجهة مطلوب |
| حجم الصورة | 90 | رسالة طويلة جدًا |
| النموذج الأولي الإلكتروني | 91 | نوع البروتوكول غير صحيح بالنسبة للمقبس |
| إينوبروتوبت | 92 | البروتوكول غير متوفر |
| دعم البروتون | 93 | البروتوكول غير مدعوم |
| دعم ESOCKTNOSUPPORT | 94 | نوع المقبس غير مدعوم |
| EOPNOTSUPP | 95 | العملية غير مدعومة |
| دعم EPFNO | 96 | عائلة البروتوكولات غير مدعومة |
| دعم EANFNO | 97 | عنوان العائلة غير مدعوم من قبل البروتوكول |
| استخدام الأدوية | 98 | العنوان قيد الاستخدام بالفعل |
| EADDRNOTAVAIL | 99 | لا يمكن تعيين العنوان المطلوب |
| إينيتداون | 100 | الشبكة معطلة |
| إينيتونريتش | 101 | الشبكة غير متاحة |
| مجموعة الإنترنت | 102 | انقطع الاتصال بالشبكة عند إعادة التشغيل |
| إيكونابورتد | 103 | تسبب البرنامج في قطع الاتصال |
| إعادة ضبط الاقتصاد | 104 | أعاد النظير ضبط الاتصال |
| إينوبوفس | 105 | لا توجد مساحة تخزين مؤقتة متاحة. هذه الحالة ناتجة عن نقص الذاكرة في مخازن نظام التشغيل المؤقتة . |
| إيسكون | 106 | نقطة نهاية النقل متصلة بالفعل |
| إينوتكون | 107 | نقطة نهاية النقل غير متصلة |
| إيقاف تشغيل ES | 108 | لا يمكن الإرسال بعد إيقاف تشغيل نقطة نهاية النقل |
| ETOOMANYREFS | 109 | عدد المراجع كبير جدًا: لا يمكن الربط |
| انتهت المهلة | 110 | انتهى وقت الاتصال |
| إيكون ريفزد | 111 | رفض اتصال |
| تعطل المضيف | 112 | الخادم معطل |
| إي هوستنريتش | 113 | لا يوجد مسار إلى المضيف |
| بالفعل | 114 | العملية جارية بالفعل |
| قيد التقدم | 115 | العملية جارية الآن |
| إستالي | 116 | مقبض ملف قديم |
| يوكلين | 117 | يحتاج الهيكل إلى التنظيف |
| إينوتنام | 118 | ليس ملف نوع مُسمى Xenix |
| متاح | 119 | لا توجد إشارات زينكس متاحة |
| إيسنام | 120 | هو ملف من نوع مسمى |
| EREMOTEIO | 121 | خطأ في الإدخال/الإخراج عن بعد |
| اقتباس إدكوت | 122 | تم تجاوز حصة القرص |
| إنوميديوم | 123 | لم يتم العثور على وسيط |
| نوع متوسط | 124 | نوع الوسيط خاطئ |
| تم الإلغاء | 125 | تم إلغاء العملية |
| إينوكي | 126 | المفتاح المطلوب غير متوفر |
| انتهت صلاحية المفتاح الإلكتروني | 127 | انتهت صلاحية المفتاح |
| تم إلغاء المفتاح الإلكتروني | 128 | تم إلغاء المفتاح |
| تم رفض المفتاح | 129 | تم رفض المفتاح من قبل الخدمة |
| المالك متوفى | 130 | توفي المالك السابق |
| قابل للاسترداد | 131 | حالة غير قابلة للاسترداد |
| إرفكيل | 132 | العملية غير ممكنة بسبب انقطاع التيار الكهربائي |
| إيهوبويزون | 133 | صفحة الذاكرة بها خطأ في الأجهزة |
| ENOTSUP | 134 | المعلمة أو الخيار غير مدعوم |
تُعرَّف أسماء الماكرو ومعاني رموز الأخطاء في تعريف معايير POSIX، إلا أن القيم العددية غير مُعرَّفة، مع أن القيم تبدو متطابقة في مختلف إصدارات يونكس وفقًا للعرف. لذا، ينبغي ألا تعتمد البرامج على قيم عددية محددة، بل يجب اختبار الشيفرة باستخدام أسماء الماكرو المحددة في قسم الأخطاء (ERRORS) من صفحة الدليل ( man page) للدالة المعنية. ولضمان سهولة قراءة الشيفرة المصدرية وقابليتها للنقل، يُوصى بشدة باستخدام أسماء الماكرو القياسية في الشيفرة. [ 12 ] [ 13 ]
انظر أيضاً
مراجع
- ↑ المعيار الدولي للغة البرمجة C (C11)، ISO/IEC 9899:2011، ص 205
- 1 2 المعيار الدولي للغة البرمجة C (C99)، ISO/IEC 9899:1999، ص 186
- ↑ "التحقق من الأخطاء" . مكتبة GNU C (glibc) . مشروع GNU. 2014-02-08 . تم الاسترجاع في 2014-06-25 .
- ↑ "وصف موجز للملحق المعياري 1" . تم الاطلاع عليه بتاريخ 12-09-2013 .
- ↑ : أرقام أخطاء النظام – مرجع التعريفات الأساسية، مواصفات يونكس الموحدة ، الإصدار 5 من مجموعة Open Group
- ↑ "أرقام الأخطاء - cppreference.com" . تم الاطلاع عليه بتاريخ 2015-05-08 .
- ↑ ستيفنز وراغو 2013 ، ص 14.
- ↑ مكابي، كولين. "مشكلة الخطأ التسلسلي" . www.club.cc.cmu.edu .
- ↑ "رموز الأخطاء (مكتبة GNU C)" . www.gnu.org . 29 مارس 2025. تم الاطلاع عليه في 5 أبريل 2025 .
- 1 2 نظام FreeBSD: رموز الخطأ
- ↑ "تصحيح الأخطاء: أخطاء POSIX" . particle.io . تم الاطلاع عليه في 5 أبريل 2025 .
- ↑ "التحقق من الأخطاء" . gnu.org . مؤسسة البرمجيات الحرة. 26 يناير 2025. تم الاطلاع عليه في 6 أبريل 2025 .
- ↑ باباس، برنت؛ غازيلو، بول (2024). "التحليل الدلالي لاستخدام وحدات الماكرو من أجل قابلية النقل". وقائع المؤتمر الدولي السادس والأربعين لهندسة البرمجيات التابع لمعهد مهندسي الكهرباء والإلكترونيات/رابطة مكائن الحوسبة . الصفحات 1-12 . arXiv : 2401.10422 . doi : 10.1145/3597503.3623323 . ISBN 979-8-4007-0217-4.
فهرس
- ستيفنز، دبليو. ريتشارد؛ راغو، ستيفن أ. (24 مايو 2013). البرمجة المتقدمة في بيئة يونكس ( الطبعة الثالثة). أديسون-ويسلي بروفيشنال . ISBN 978-0321637734تم الاطلاع عليه بتاريخ 27 فبراير 2015 .
روابط خارجية
- دليل استدعاءات نظام FreeBSD
- – دليل مبرمج لينكس – وظائف المكتبة من Manned.org
- دليل مكتبة GNU C: رموز الخطأ
- قوائم قيم errno على نظام لينكس، سواء كانت رقمية أو رمزية
- رؤوس مكتبة C القياسية
- رموز خطأ POSIX
