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 ]وصف
EPERM1العملية غير مسموحة
إينوينت2لا يوجد ملف أو دليل بهذا الاسم
بحث3لا توجد عملية من هذا القبيل
مدخل4انقطاع مكالمة النظام
EIO5خطأ في الإدخال/الإخراج
إنكسيو6لا يوجد جهاز أو عنوان بهذا الاسم
E2BIG7قائمة الحجج طويلة جدًا
إينو إكسيك8خطأ في تنسيق الملف التنفيذي
EBADF9واصف ملف غير صالح
طفل10لا توجد عمليات فرعية
مرة أخرى11المورد غير متاح مؤقتًا
إينوميم12لا يمكن تخصيص الذاكرة
الوصول13تم رفض الإذن
خطأ إلكتروني14عنوان خاطئ
ENOTBLK15جهاز حظر مطلوب
إيبوسي16الجهاز أو المورد مشغول
موجود17الملف موجود
EXDEF18رابط غير صالح بين الأجهزة
إينوديف19لا يوجد جهاز من هذا القبيل
ENOTDIR20ليس دليلاً
EISDIR21هو دليل
باطلة22حجة غير صالحة
ملف23عدد كبير جدًا من الملفات المفتوحة في النظام
ملف24عدد كبير جدًا من الملفات المفتوحة
ENOTTY25أمر ioctl غير مناسب للجهاز
ETXTBSY26ملف نصي مشغول
إف بي آي جي27حجم الملف كبير جدًا
إينوسبك28لا توجد مساحة متبقية على الجهاز
إسبايب29البحث غير القانوني
EROFS30نظام ملفات للقراءة فقط
إم لينك31روابط كثيرة جداً
إيبيب32أنبوب مكسور
إيدوم33حجة عددية خارج النطاق
برتقالي34النتيجة العددية خارج النطاق
EDEADLK35تم تجنب حالة الجمود في الموارد
أداة مينا طويلة36اسم الملف طويل جدًا
إينولك37لا توجد أقفال متاحة
إينوسيس38لم يتم تنفيذ الوظيفة
إينوتيمبتي39الدليل غير فارغ
إيلوب40مستويات كثيرة جداً من الروابط الرمزية
إينومسج42لا توجد رسالة من النوع المطلوب
EIDRM43تمت إزالة المعرّف
ECHRNG44رقم القناة خارج النطاق
EL2NSYNC45المستوى 2 غير متزامن
EL3HLT46تم إيقاف المستوى 3
EL3RST47إعادة ضبط المستوى 3
الحرس الوطني للحرس الوطني48رقم الرابط خارج النطاق
إيوناش49لم يتم إرفاق برنامج تشغيل البروتوكول
إينوكسي50لا يوجد هيكل CSI متاح
EL2HLT51تم إيقاف المستوى 2
إيباد52عملية تبادل غير صالحة
إيبادر53وصف طلب غير صالح
كامل54استبدال كامل
إينوانو55بدون قطب موجب
EBADRQC56رمز طلب غير صالح
EBADSLT57خانة غير صالحة
EBFONT59تنسيق ملف خط غير صالح
إينوستر60الجهاز ليس بثًا
بيانات إلكترونية61لا توجد بيانات متاحة
الوقت62انتهى المؤقت
ENOSR63موارد خارج التدفقات
إينونيت64الجهاز غير متصل بالشبكة
ENOPKG65لم يتم تثبيت الحزمة
إي ريموت66الكائن بعيد
إنولينك67تم قطع الاتصال
فيروس التهاب الدماغ الخيلي الشرقي68خطأ في الإعلان
ESRMNT69خطأ في Srmount
التجارة الإلكترونية70حدث خطأ في الاتصال أثناء الإرسال
إيبروتو71خطأ في البروتوكول
القفزات المتعددة72محاولة القفز المتعدد
إيدوت دوت73خطأ خاص بنظام RFS
EBADMSG74رسائل سيئة
فيضان75القيمة كبيرة جدًا بحيث لا يمكن تخزينها في نوع البيانات
إينوتونيك76الاسم غير فريد على الشبكة
EBADFD77واصف الملف في حالة سيئة
EREMCHG78تم تغيير عنوان الجهاز البعيد
إيليباك79لا يمكن الوصول إلى مكتبة مشتركة مطلوبة
إليباد80الوصول إلى مكتبة مشتركة تالفة
ELIBSCN81قسم .lib في ملف a.out تالف
ELIBMAX82محاولة الربط بالعديد من المكتبات المشتركة
ELIBEXEC83لا يمكن تنفيذ مكتبة مشتركة بشكل مباشر
إيلسك84تسلسل بايت غير قانوني
إعادة التشغيل85يجب إعادة تشغيل استدعاء النظام الذي تمت مقاطعته
ESTRPIPE86خطأ في تدفق البيانات
مستخدمون87عدد المستخدمين كبير جدًا
إينوتسوك88تشغيل المقبس على أجهزة غير مزودة بمقبس
EDESTADDRREQ89عنوان الوجهة مطلوب
حجم الصورة90رسالة طويلة جدًا
النموذج الأولي الإلكتروني91نوع البروتوكول غير صحيح بالنسبة للمقبس
إينوبروتوبت92البروتوكول غير متوفر
دعم البروتون93البروتوكول غير مدعوم
دعم ESOCKTNOSUPPORT94نوع المقبس غير مدعوم
EOPNOTSUPP95العملية غير مدعومة
دعم EPFNO96عائلة البروتوكولات غير مدعومة
دعم EANFNO97عنوان العائلة غير مدعوم من قبل البروتوكول
استخدام الأدوية98العنوان قيد الاستخدام بالفعل
EADDRNOTAVAIL99لا يمكن تعيين العنوان المطلوب
إينيتداون100الشبكة معطلة
إينيتونريتش101الشبكة غير متاحة
مجموعة الإنترنت102انقطع الاتصال بالشبكة عند إعادة التشغيل
إيكونابورتد103تسبب البرنامج في قطع الاتصال
إعادة ضبط الاقتصاد104أعاد النظير ضبط الاتصال
إينوبوفس105لا توجد مساحة تخزين مؤقتة متاحة. هذه الحالة ناتجة عن نقص الذاكرة في مخازن نظام التشغيل المؤقتة .

[ 10 ]

إيسكون106نقطة نهاية النقل متصلة بالفعل
إينوتكون107نقطة نهاية النقل غير متصلة
إيقاف تشغيل ES108لا يمكن الإرسال بعد إيقاف تشغيل نقطة نهاية النقل
ETOOMANYREFS109عدد المراجع كبير جدًا: لا يمكن الربط
انتهت المهلة110انتهى وقت الاتصال
إيكون ريفزد111رفض اتصال
تعطل المضيف112الخادم معطل
إي هوستنريتش113لا يوجد مسار إلى المضيف
بالفعل114العملية جارية بالفعل
قيد التقدم115العملية جارية الآن
إستالي116مقبض ملف قديم
يوكلين117يحتاج الهيكل إلى التنظيف
إينوتنام118ليس ملف نوع مُسمى Xenix
متاح119لا توجد إشارات زينكس متاحة
إيسنام120هو ملف من نوع مسمى
EREMOTEIO121خطأ في الإدخال/الإخراج عن بعد
اقتباس إدكوت122تم تجاوز حصة القرص
إنوميديوم123لم يتم العثور على وسيط
نوع متوسط124نوع الوسيط خاطئ
تم الإلغاء125تم إلغاء العملية
إينوكي126المفتاح المطلوب غير متوفر
انتهت صلاحية المفتاح الإلكتروني127انتهت صلاحية المفتاح
تم إلغاء المفتاح الإلكتروني128تم إلغاء المفتاح
تم رفض المفتاح129تم رفض المفتاح من قبل الخدمة
المالك متوفى130توفي المالك السابق
قابل للاسترداد131حالة غير قابلة للاسترداد
إرفكيل132العملية غير ممكنة بسبب انقطاع التيار الكهربائي
إيهوبويزون133صفحة الذاكرة بها خطأ في الأجهزة
ENOTSUP134المعلمة أو الخيار غير مدعوم

تُعرَّف أسماء الماكرو ومعاني رموز الأخطاء في تعريف معايير POSIX، إلا أن القيم العددية غير مُعرَّفة، مع أن القيم تبدو متطابقة في مختلف إصدارات يونكس وفقًا للعرف. لذا، ينبغي ألا تعتمد البرامج على قيم عددية محددة، بل يجب اختبار الشيفرة باستخدام أسماء الماكرو المحددة في قسم الأخطاء (ERRORS) من صفحة الدليل ( man page) للدالة المعنية. ولضمان سهولة قراءة الشيفرة المصدرية وقابليتها للنقل، يُوصى بشدة باستخدام أسماء الماكرو القياسية في الشيفرة. [ 12 ] [ 13 ]

انظر أيضاً

مراجع

  1. المعيار الدولي للغة البرمجة C (C11)، ISO/IEC 9899:2011، ص 205
  2. 1 2 المعيار الدولي للغة البرمجة C (C99)، ISO/IEC 9899:1999، ص 186
  3. "التحقق من الأخطاء" . مكتبة GNU C (glibc) . مشروع GNU. 2014-02-08 . تم الاسترجاع في 2014-06-25 .
  4. "وصف موجز للملحق المعياري 1" . تم الاطلاع عليه بتاريخ 12-09-2013 .
  5. : أرقام أخطاء النظام مرجع التعريفات الأساسية، مواصفات يونكس الموحدة ، الإصدار 5 من مجموعة Open Grouperrno.h   
  6. "أرقام الأخطاء - cppreference.com" . تم الاطلاع عليه بتاريخ 2015-05-08 .
  7. ستيفنز وراغو 2013 ، ص 14.
  8. مكابي، كولين. "مشكلة الخطأ التسلسلي" . www.club.cc.cmu.edu .
  9. "رموز الأخطاء (مكتبة GNU C)" . www.gnu.org . 29 مارس 2025. تم الاطلاع عليه في 5 أبريل 2025 .
  10. 1 2 نظام FreeBSD: رموز الخطأ
  11. "تصحيح الأخطاء: أخطاء POSIX" . particle.io . تم ​​الاطلاع عليه في 5 أبريل 2025 .
  12. "التحقق من الأخطاء" . gnu.org . مؤسسة البرمجيات الحرة. 26 يناير 2025. تم الاطلاع عليه في 6 أبريل 2025 .
  13. باباس، برنت؛ غازيلو، بول (2024). "التحليل الدلالي لاستخدام وحدات الماكرو من أجل قابلية النقل". وقائع المؤتمر الدولي السادس والأربعين لهندسة البرمجيات التابع لمعهد مهندسي الكهرباء والإلكترونيات/رابطة مكائن ​​الحوسبة . الصفحات 1-12 . arXiv : 2401.10422 . doi : 10.1145/3597503.3623323 . ISBN  979-8-4007-0217-4.

فهرس