- unstable 4.31.0-1
| errno(3) | Library Functions Manual | errno(3) |
الاسم¶
errno - رقم آخر خطأ
المكتبة¶
مكتبة سي المعيارية (libc، -lc)
موجز¶
#include <errno.h>
الوصف¶
يُعرّف ملف الرأس <errno.h> المتغير الصحيح errno، الذي تُعيِّنه استدعاءات النظام وبعض دوال المكتبة عند حدوث خطأ للإشارة إلى ما حدث من خطأ.
errno¶
قيمة errno ذات دلالة فقط عندما تشير قيمة إرجاع الاستدعاء إلى خطأ (أي -1 من معظم استدعاءات النظام؛ -1 أو NULL من معظم دوال المكتبة)؛ يُسمح لدالة تنجح بـ تغيير errno. لا تُعيِّن أي استدعاء نظام أو دالة مكتبة قيمة errno إلى الصفر أبدًا.
لبعض استدعاءات النظام ودوال المكتبة (مثل getpriority(2))، تكون -1 قيمة إرجاع صالحة عند النجاح. في مثل هذه الحالات، يمكن تمييز الإرجاع الناجح عن إرجاع الخطأ بتعيين errno إلى الصفر قبل الاستدعاء، ثم، إذا أرجع الاستدعاء حالة تشير إلى احتمال حدوث خطأ، يُفحص ما إذا كان errno له قيمة غير صفرية.
يُعرِّف معيار ISO C errno كقيمة يسرى قابلة للتعديل من النوع int، ويجب عدم التصريح عنه صراحةً؛ قد يكون errno ماكروًا. errno محلي الخيط؛ تعيينه في خيط واحد لا يؤثر على قيمته في أي خيط آخر.
أرقام الأخطاء وأسماؤها¶
أرقام الأخطاء الصالحة هي جميع الأرقام الموجبة. يُعرّف ملف الرأس <errno.h> أسماء رمزية لكل رقم خطأ محتمل قد يظهر في errno.
يجب أن تكون لجميع أسماء الأخطاء المحددة بواسطة POSIX.1 قيم مميزة، باستثناء EAGAIN و EWOULDBLOCK، اللذين قد يكونان متطابقين. على Linux، هذان الاثنان لهما نفس القيمة على جميع البنى.
تختلف أرقام الأخطاء المقابلة لكل اسم رمزي عبر أنظمة UNIX، وحتى عبر البنى المختلفة على Linux. لذلك، لا تُدرج القيم الرقمية كجزء من قائمة أسماء الأخطاء أدناه. يمكن استخدام الدالتين perror(3) و strerror(3) لتحويل هذه الأسماء إلى رسائل خطأ نصية مقابلة.
على أي نظام Linux معين، يمكن الحصول على قائمة بجميع أسماء الأخطاء الرمزية وأرقام الأخطاء المقابلة باستخدام الأمر errno(1) (جزء من حزمة moreutils):
$ errno -l; EPERM 1 العملية غير مسموح بها (Operation not permitted) ENOENT 2 لا يوجد ملف أو دليل كهذا (No such file or directory) ESRCH 3 لا توجد عملية كهذه (No such process) EINTR 4 استدعاء نظام مقطوع (Interrupted system call) EIO 5 خطأ في الإدخال/الإخراج (Input/output error) ...
يمكن أيضًا استخدام الأمر errno(1) للبحث عن أرقام وأسماء أخطاء فردية، وللبحث عن الأخطاء باستخدام سلاسل محارف من وصف الخطأ، كما في الأمثلة التالية:
$ errno 2; ENOENT 2 لا يوجد ملف أو دليل كهذا (No such file or directory) $ errno ESRCH; ESRCH 3 لا توجد عملية كهذه (No such process) $ errno -s permission; EACCES 13 الإذن مرفوض (Permission denied)
قائمة أسماء الأخطاء¶
في قائمة أسماء الأخطاء الرمزية أدناه، تُوسم أسماء مختلفة كما يلي:
- POSIX.1-2001
- يُعرّف الاسم بواسطة POSIX.1-2001، ويُعرّف في إصدارات POSIX.1 اللاحقة، ما لم يُذكر خلاف ذلك.
- POSIX.1-2008
- يُعرّف الاسم في POSIX.1-2008، لكنه لم يكن موجودًا في معايير POSIX.1 السابقة.
- C99
- الاسم مُعرَّف بواسطة C99.
أدناه قائمة بأسماء الأخطاء الرمزية المُعرَّفة على لينكس:
- E2BIG
- قائمة الوسائط طويلة جدًا (POSIX.1-2001).
- EACCES
- الصلاحية مرفوضة (POSIX.1-2001).
- EADDRINUSE
- العنوان قيد الاستخدام بالفعل (POSIX.1-2001).
- EADDRNOTAVAIL
- العنوان غير متاح (POSIX.1-2001).
- EAFNOSUPPORT
- عائلة العنوان غير مدعومة (POSIX.1-2001).
- EAGAIN
- المورد غير متاح مؤقتًا (قد يكون نفس قيمة EWOULDBLOCK) (POSIX.1-2001).
- EALREADY
- الاتصال قيد التقدم بالفعل (POSIX.1-2001).
- EBADE
- تبادل غير صالح.
- EBADF
- واصف ملف سيئ (POSIX.1-2001).
- EBADFD
- واصف الملف في حالة سيئة.
- EBADMSG
- رسالة سيئة (POSIX.1-2001).
- EBADR
- واصف طلب غير صالح.
- EBADRQC
- رمز طلب غير صالح.
- EBADSLT
- فتحة غير صالحة.
- EBUSY
- الجهاز أو المورد مشغول (POSIX.1-2001).
- ECANCELED
- أُلغيَت العملية (POSIX.1-2001).
- ECHILD
- لا توجد عمليات فرعية (POSIX.1-2001).
- ECHRNG
- رقم القناة خارج النطاق.
- ECOMM
- خطأ في الاتصال عند الإرسال.
- ECONNABORTED
- أُجهض الاتصال (POSIX.1-2001).
- ECONNREFUSED
- رُفض الاتصال (POSIX.1-2001).
- ECONNRESET
- أُعيد تعيين الاتصال (POSIX.1-2001).
- EDEADLK
- تجنب الجمود في الموارد (POSIX.1-2001).
- EDEADLOCK
- في معظم البنى، مرادف لـ EDEADLK. في بعض البنى (مثل Linux MIPS، PowerPC، SPARC)، هو رمز خطأ منفصل "خطأ جمود قفل الملف".
- EDESTADDRREQ
- عنوان الوجهة مطلوب (POSIX.1-2001).
- EDOM
- وسيطة الرياضيات خارج نطاق الدالة (POSIX.1، C99).
- EDQUOT
- تجاوز حصة القرص (POSIX.1-2001).
- EEXIST
- الملف موجود (POSIX.1-2001).
- EFAULT
- عنوان سيئ (POSIX.1-2001).
- EFBIG
- الملف كبير جدًا (POSIX.1-2001).
- EHOSTDOWN
- المُضيف معطَّل.
- EHOSTUNREACH
- المُضيف غير قابل للوصول (POSIX.1-2001).
- EHWPOISON
- صفحة الذاكرة بها خطأ عتادي.
- EIDRM
- المُعرِّف أُزيل (POSIX.1-2001).
- EILSEQ
- حرف متعدد البايت أو عريض غير صالح أو ناقص (POSIX.1, C99).
- النص المُعروض هنا هو وصف خطأ glibc؛ في POSIX.1، يُوصف هذا الخطأ بأنه "تسلسل بايت غير قانوني".
- EINPROGRESS
- العملية قيد التقدم (POSIX.1-2001).
- EINTR
- استدعاء دالة مُقاطَع (POSIX.1-2001); انظر signal(7).
- EINVAL
- معامل غير صالح (POSIX.1-2001).
- EIO
- خطأ إدخال/إخراج (POSIX.1-2001).
- EISCONN
- المقبس موصول (POSIX.1-2001).
- EISDIR
- هو دليل (POSIX.1-2001).
- EISNAM
- هو ملف نوع مُسمى.
- EKEYEXPIRED
- انتهت صلاحية المفتاح.
- EKEYREJECTED
- رُفض المفتاح من الخدمة.
- EKEYREVOKED
- سُحب المفتاح.
- EL2HLT
- المستوى 2 مُوقَف.
- EL2NSYNC
- المستوى 2 غير متزامن.
- EL3HLT
- المستوى 3 متوقف.
- EL3RST
- المستوى 3 معاد تعيينه.
- ELIBACC
- لا يمكن الوصول إلى مكتبة مشتركة مطلوبة.
- ELIBBAD
- الوصول إلى مكتبة مشتركة تالفة.
- ELIBMAX
- محاولة ربط عدد كبير جدًا من المكتبات المشتركة.
- ELIBSCN
- قسم .lib في a.out تالف
- ELIBEXEC
- لا يمكن تنفيذ مكتبة مشتركة مباشرة.
- ELNRNG
- رقم الرابط خارج النطاق.
- ELOOP
- عدد كبير جدًا من مستويات الروابط الرمزية (POSIX.1-2001).
- EMEDIUMTYPE
- نوع الوسيط خاطئ.
- EMFILE
- ملفات مفتوحة كثيرة جدًا (POSIX.1-2001). يحدث هذا عادةً بسبب تجاوز حد المورد RLIMIT_NOFILE الموصوف في getrlimit(2). يمكن أيضًا أن يحدث بسبب تجاوز الحد المحدد في /proc/sys/fs/nr_open.
- EMLINK
- روابط كثيرة جدًا (POSIX.1-2001).
- EMSGSIZE
- رسالة طويلة جدًا (POSIX.1-2001).
- EMULTIHOP
- محاولة قفزات متعددة (POSIX.1-2001).
- ENAMETOOLONG
- اسم ملف طويل جدًا (POSIX.1-2001).
- ENETDOWN
- الشبكة معطلة (POSIX.1-2001).
- ENETRESET
- اتصال أُبطل بواسطة الشبكة (POSIX.1-2001).
- ENETUNREACH
- شبكة غير قابلة للوصول (POSIX.1-2001).
- ENFILE
- ملفات مفتوحة كثيرة جدًا في النظام (POSIX.1-2001). في لينكس، ربما يكون هذا نتيجة مواجهة حد /proc/sys/fs/file-max (انظر proc(5)).
- ENOANO
- لا يوجد مصعد.
- ENOBUFS
- لا توجد مساحة مخزن مؤقت متاحة (POSIX.1 (خيار XSI STREAMS)).
- ENODATA
- السمة المسماة غير موجودة، أو العملية ليس لديها وصول إلى هذه السمة؛ انظر xattr(7).
- في POSIX.1-2001 (خيار XSI STREAMS)، وُصف هذا الخطأ بأنه "لا توجد رسالة متاحة في طابور قراءة رأس STREAM".
- عادةً، ينتج هذا الخطأ عندما لا يوجد اسم مسار محدد، أو أحد المكونات في بادئة الدليل لاسم المسار غير موجود، أو اسم المسار المحدد هو رابط رمزي معلق.
- ENOEXEC
- خطأ تنسيق تنفيذ (POSIX.1-2001).
- ENOKEY
- المفتاح المطلوب غير متوفر.
- ENOLCK
- لا توجد أقفال متوفرة (POSIX.1-2001).
- ENOLINK
- قُطعت الوصلة (POSIX.1-2001).
- ENOMEDIUM
- لم يُعثر على وسيط.
- ENOMEM
- مساحة غير كافية/لا يمكن تخصيص ذاكرة (POSIX.1-2001).
- ENOMSG
- لا توجد رسالة من النوع المطلوب (POSIX.1-2001).
- ENONET
- الآلة غير موجودة على الشبكة.
- ENOPKG
- الحزمة غير مُثبتة.
- ENOPROTOOPT
- البروتوكول غير متوفر (POSIX.1-2001).
- ENOSPC
- لا توجد مساحة متبقية على الجهاز (POSIX.1-2001).
- ENOSR
- لا توجد موارد STREAM (POSIX.1 (خيار XSI STREAMS)).
- ENOSTR
- ليس STREAM (POSIX.1 (خيار XSI STREAMS)).
- ENOSYS
- الدالة غير مُطبَّقة (POSIX.1-2001).
- ENOTBLK
- جهاز كتلي مطلوب.
- ENOTCONN
- المقبس غير موصول (POSIX.1-2001).
- ENOTDIR
- ليس دليلاً (POSIX.1-2001).
- ENOTEMPTY
- الدليل ليس فارغاً (POSIX.1-2001).
- ENOTRECOVERABLE
- الحالة غير قابلة للاسترداد (POSIX.1-2008).
- ENOTSOCK
- ليس مقبساً (POSIX.1-2001).
- ENOTSUP
- العملية غير مدعومة (POSIX.1-2001).
- ENOTTY
- عملية تحكم إدخال/إخراج غير مناسبة (POSIX.1-2001).
- ENOTUNIQ
- الاسم ليس فريداً على الشبكة.
- ENXIO
- لا يوجد جهاز أو عنوان كهذا (POSIX.1-2001).
- EOPNOTSUPP
- العملية غير مدعومة على المقبس (POSIX.1-2001).
- (ENOTSUP و EOPNOTSUPP لهما نفس القيمة في لينكس، ولكن وفقاً لـ POSIX.1 يجب أن تكون قيم الخطأ هذه متميزة.)
- EOVERFLOW
- القيمة كبيرة جداً لتُخزَّن في نوع البيانات (POSIX.1-2001).
- EOWNERDEAD
- المالك مات (POSIX.1-2008).
- EPERM
- العملية غير مسموح بها (POSIX.1-2001).
- EPFNOSUPPORT
- عائلة البروتوكول غير مدعومة.
- EPIPE
- أنبوب مكسور (POSIX.1-2001).
- EPROTO
- خطأ في البروتوكول (POSIX.1-2001).
- EPROTONOSUPPORT
- البروتوكول غير مدعوم (POSIX.1-2001).
- EPROTOTYPE
- نوع البروتوكول خاطئ للمقبس (POSIX.1-2001).
- ERANGE
- النتيجة كبيرة جدًا (POSIX.1, C99).
- EREMCHG
- تغير العنوان البعيد.
- EREMOTE
- الكائن بعيد.
- EREMOTEIO
- خطأ إدخال/إخراج بعيد.
- ERESTART
- يجب إعادة تشغيل استدعاء النظام المتقطع.
- ERFKILL
- العملية غير ممكنة بسبب قتل الترددات الراديوية.
- EROFS
- نظام الملفات للقراءة فقط (POSIX.1-2001).
- ESHUTDOWN
- لا يمكن الإرسال بعد إغلاق نقطة نهاية النقل.
- ESPIPE
- بحث غير صالح (POSIX.1-2001).
- ESOCKTNOSUPPORT
- نوع المقبس غير مدعوم.
- ESRCH
- لا توجد عملية كهذه (POSIX.1-2001).
- ESTALE
- مقبض ملف قديم (POSIX.1-2001).
- يمكن أن يحدث هذا الخطأ لـ NFS ولأنظمة الملفات الأخرى.
- (يقول POSIX.1 "مهلة STREAM ioctl(2) ".)
- ETIMEDOUT
- انتهت مهلة الاتصال (POSIX.1-2001).
- ETOOMANYREFS
- مراجع كثيرة جدًا: لا يمكن الربط.
- ETXTBSY
- ملف النص مشغول (POSIX.1-2001).
- EUCLEAN
- البنية تحتاج إلى تنظيف.
- EUNATCH
- برنامج تشغيل البروتوكول غير موصول.
- EUSERS
- مستخدمون كثيرون جدًا.
- EWOULDBLOCK
- العملية ستحظر (قد تكون نفس قيمة EAGAIN) (POSIX.1-2001).
- EXDEV
- رابط عبر الأجهزة غير صالح (POSIX.1-2001).
- EXFULL
- التبادل ممتلئ.
ملاحظات¶
خطأ شائع هو القيام بـ
if (somecall() == -1) {
printf("somecall() failed\n");
if (errno == ...) { ...; }
}
حيث لم يعد errno بحاجة إلى الاحتفاظ بالقيمة التي كانت عليه عند العودة من somecall() (أي، قد تم تغييرها بواسطة printf(3)). إذا كان يجب الحفاظ على قيمة errno عبر استدعاء مكتبة، فيجب حفظها:
if (somecall() == -1) {
int errsv = errno;
printf("somecall() failed\n");
if (errsv == ...) { ...; }
}
لاحظ أن واجهات برمجة تطبيقات خيوط POSIX لا تضبط errno عند الخطأ. بدلاً من ذلك، عند الفشل تُرجع رقم خطأ كنتيجة للدالة. تحمل أرقام الأخطاء هذه نفس معاني أرقام الأخطاء المُرجعة في errno بواسطة واجهات برمجة تطبيقات أخرى.
على بعض الأنظمة القديمة، لم يكن <errno.h> موجوداً أو لم يُصرّح عن errno، لذا كان من الضروري التصريح عن errno يدوياً (أي extern int errno). لا تفعل هذا. لقد توقف عن كونه ضرورياً منذ زمن بعيد، وسيُسبب مشاكل مع الإصدارات الحديثة من مكتبة C.
انظر أيضًا¶
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 8 فبراير 2026 | صفحات دليل لينكس 6.18 |