модуль Errno
Когда операционная система сталкивается с ошибкой, она обычно сообщает о ней в виде целочисленного кода ошибки:
$ ls nosuch.txt ls: cannot access 'nosuch.txt': No such file or directory $ echo $? # Code for last error. 2
Когда интерпретатор Ruby взаимодействует с операционной системой и получает такой код ошибки (например, 2), он сопоставляет код с определённым классом исключения Ruby (например, Errno::ENOENT):
File.open('nosuch.txt')
# => No such file or directory @ rb_sysopen - nosuch.txt (Errno::ENOENT)
Каждый такой класс:
-
Является вложенным классом этого модуля,
Errno. -
Является подклассом класса
SystemCallError. -
Связан с кодом ошибки.
Таким образом:
Errno::ENOENT.superclass # => SystemCallError Errno::ENOENT::Errno # => 2
Имена вложенных классов возвращает метод Errno.constants:
Errno.constants.size # => 158 Errno.constants.sort.take(5) # => [:E2BIG, :EACCES, :EADDRINUSE, :EADDRNOTAVAIL, :EADV]
Как видно выше, код ошибки, связанный с каждым классом, доступен в виде значения константы; значение для конкретного класса может различаться в разных операционных системах. Если класс не требуется в данной операционной системе, значение равно нулю:
Errno::ENOENT::Errno # => 2 Errno::ENOTCAPABLE::Errno # => 0
Константы
- E2BIG
-
Ошибка «Слишком длинный список аргументов»
- EACCES
-
Ошибка «Доступ запрещён»
- EADDRINUSE
-
Ошибка «Адрес уже используется»
- EADDRNOTAVAIL
-
Ошибка «Адрес недоступен»
- EADV
-
Ошибка «Ошибка объявления»
- EAFNOSUPPORT
-
Ошибка «Семейство адресов не поддерживается»
- EAGAIN
-
Ошибка «Ресурс временно недоступен, повторите попытку (может иметь то же значение, что и
EWOULDBLOCK)» - EALREADY
-
Ошибка «Подключение уже выполняется»
- EAUTH
-
Ошибка «Ошибка аутентификации»
- EBADARCH
-
Ошибка «Неверный тип ЦП в исполняемом файле»
- EBADE
-
Ошибка «Неверный обмен»
- EBADEXEC
-
Ошибка «Некорректный исполняемый файл»
- EBADF
-
Ошибка «Некорректный файловый дескриптор»
- EBADFD
-
Ошибка «Файловый дескриптор находится в некорректном состоянии»
- EBADMACHO
-
Ошибка «Некорректный файл Macho»
- EBADMSG
-
Ошибка «Некорректное сообщение»
- EBADR
-
Ошибка «Недопустимый дескриптор запроса»
- EBADRPC
-
Ошибка «Некорректная структура RPC»
- EBADRQC
-
Ошибка «Недопустимый код запроса»
- EBADSLT
-
Ошибка «Недопустимый слот»
- EBFONT
-
Ошибка «Некорректный формат файла шрифта»
- EBUSY
-
Ошибка «Устройство или ресурс заняты»
- ECANCELED
-
Ошибка «Операция отменена»
- ECAPMODE
-
Ошибка «Не разрешено в режиме capabilities»
- ECHILD
-
Ошибка «Нет дочерних процессов»
- ECHRNG
-
Ошибка «Номер канала вне допустимого диапазона»
- ECOMM
-
Ошибка «Ошибка связи при отправке»
- ECONNABORTED
-
Ошибка «Подключение прервано»
- ECONNREFUSED
-
Ошибка «В подключении отказано»
- ECONNRESET
-
Ошибка «Подключение сброшено»
- EDEADLK
-
Ошибка «Взаимная блокировка ресурсов предотвращена»
- EDEADLOCK
-
Ошибка «Взаимная блокировка файлов»
- EDESTADDRREQ
-
Ошибка «Требуется адрес назначения»
- EDEVERR
-
Ошибка «Ошибка устройства; например, закончилась бумага в принтере»
- EDOM
-
Ошибка «Аргумент математической функции выходит за пределы её области определения»
- EDOOFUS
-
Ошибка «Неправильное использование функции»
- EDOTDOT
-
Ошибка «Ошибка, специфичная для RFS»
- EDQUOT
-
Ошибка «Превышена дисковая квота»
- EEXIST
-
Ошибка «Файл существует»
- EFAULT
-
Ошибка «Некорректный адрес»
- EFBIG
-
Ошибка «Файл слишком велик»
- EFTYPE
-
Ошибка «Недопустимый тип или формат файла»
- EHOSTDOWN
-
Ошибка «Узел не работает»
- EHOSTUNREACH
-
Ошибка «Узел недоступен»
- EHWPOISON
-
Ошибка «Аппаратная ошибка страницы памяти»
- EIDRM
-
Ошибка «Идентификатор удалён»
- EILSEQ
-
Ошибка «Недопустимый или неполный многобайтовый или широкосимвольный символ»
- EINPROGRESS
-
Ошибка «Операция выполняется»
- EINTR
-
Ошибка «Вызов функции прерван»
- EINVAL
-
Ошибка «Недопустимый аргумент»
- EIO
-
Ошибка «Ошибка ввода-вывода»
- EIPSEC
-
Ошибка «Сбой обработки IPsec»
- EISCONN
-
Ошибка «Сокет подключён»
- EISDIR
-
Ошибка «Является каталогом»
- EISNAM
-
Ошибка «Является именованным типом файла»
- EKEYEXPIRED
-
Ошибка «Срок действия ключа истёк»
- EKEYREJECTED
-
Ошибка «Служба отклонила ключ»
- EKEYREVOKED
-
Ошибка «Ключ отозван»
- EL2HLT
-
Ошибка «Уровень 2 остановлен»
- EL2NSYNC
-
Ошибка «Уровень 2 не синхронизирован»
- EL3HLT
-
Ошибка «Уровень 3 остановлен»
- EL3RST
-
Ошибка «Сброс уровня 3»
- ELAST
-
Ошибка «Наибольшее значение errno»
- ELIBACC
-
Ошибка «Не удаётся получить доступ к необходимой разделяемой библиотеке»
- ELIBBAD
-
Ошибка «Обращение к повреждённой разделяемой библиотеке»
- ELIBEXEC
-
Ошибка «Невозможно напрямую выполнить разделяемую библиотеку»
- ELIBMAX
-
Ошибка «Попытка связать слишком много разделяемых библиотек»
- ELIBSCN
-
Ошибка «Раздел .lib в a.out повреждён»
- ELNRNG
-
Ошибка «Номер ссылки вне допустимого диапазона»
- ELOOP
-
Ошибка «Слишком много уровней символических ссылок»
- EMEDIUMTYPE
-
Ошибка «Неверный тип носителя»
- EMFILE
-
Ошибка «Слишком много открытых файлов»
- EMLINK
-
Ошибка «Слишком много ссылок»
- EMSGSIZE
-
Ошибка «Сообщение слишком длинное»
- EMULTIHOP
-
Ошибка «Предпринята попытка многоузловой передачи»
- ENAMETOOLONG
-
Ошибка «Имя файла слишком длинное»
- ENAVAIL
-
Ошибка «Нет доступных семафоров XENIX»
- ENEEDAUTH
-
Ошибка «Требуется средство аутентификации»
- ENETDOWN
-
Ошибка «Сеть не работает»
- ENETRESET
-
Ошибка «Подключение прервано сетью»
- ENETUNREACH
-
Ошибка «Сеть недоступна»
- ENFILE
-
Ошибка «В системе слишком много открытых файлов»
- ENOANO
-
Ошибка «Нет anode»
- ENOATTR
-
Ошибка «Атрибут не найден»
- ENOBUFS
-
Ошибка «Недостаточно места в буфере»
- ENOCSI
-
Ошибка «Нет доступной структуры CSI»
- ENODATA
-
Ошибка «Данные недоступны»
- ENODEV
-
Ошибка «Такого устройства нет»
- ENOENT
-
Ошибка «Нет такого файла или каталога»
- ENOEXEC
-
Ошибка «Ошибка формата исполняемого файла»
- ENOKEY
-
Ошибка «Требуемый ключ недоступен»
- ENOLCK
-
Ошибка «Нет доступных блокировок»
- ENOLINK
-
Ошибка «Связь разорвана»
- ENOMEDIUM
-
Ошибка «Носитель не найден»
- ENOMEM
-
Ошибка «Недостаточно места / невозможно выделить память»
- ENOMSG
-
Ошибка «Нет сообщения требуемого типа»
- ENONET
-
Ошибка «Компьютер не подключён к сети»
- ENOPKG
-
Ошибка «Пакет не установлен»
- ENOPOLICY
-
Ошибка «Такой политики нет»
- ENOPROTOOPT
-
Ошибка «Протокол недоступен»
- ENOSPC
-
Ошибка «На устройстве не осталось места»
- ENOSR
-
Ошибка «Нет ресурсов STREAM»
- ENOSTR
-
Ошибка «Не является STREAM»
- ENOSYS
-
Ошибка «Функциональность не реализована»
- ENOTBLK
-
Ошибка «Требуется блочное устройство»
- ENOTCAPABLE
-
Ошибка «Недостаточно capabilities»
- ENOTCONN
-
Ошибка «Сокет не подключён»
- ENOTDIR
-
Ошибка «Не является каталогом»
- ENOTEMPTY
-
Ошибка «Каталог не пуст»
- ENOTNAM
-
Ошибка «Не является файлом именованного типа XENIX»
- ENOTRECOVERABLE
-
Ошибка «Состояние невозможно восстановить»
- ENOTSOCK
-
Ошибка «Не является сокетом»
- ENOTSUP
-
Ошибка «Операция не поддерживается»
- ENOTTY
-
Ошибка «Неподходящая операция управления вводом-выводом»
- ENOTUNIQ
-
Ошибка «Имя не уникально в сети»
- ENXIO
-
Ошибка «Нет такого устройства или адреса»
- EOPNOTSUPP
-
Ошибка «Операция не поддерживается сокетом»
- EOVERFLOW
-
Ошибка «Значение слишком велико, чтобы поместиться в тип данных»
- EOWNERDEAD
-
Ошибка «Владелец завершил работу»
- EPERM
-
Ошибка «Операция не разрешена»
- EPFNOSUPPORT
-
Ошибка «Семейство протоколов не поддерживается»
- EPIPE
-
Ошибка «Обрыв канала»
- EPROCLIM
-
Ошибка «Слишком много процессов»
- EPROCUNAVAIL
-
Ошибка «Некорректная процедура для программы»
- EPROGMISMATCH
-
Ошибка «Неверная версия программы»
- EPROGUNAVAIL
-
Ошибка «Программа RPC недоступна»
- EPROTO
-
Ошибка «Ошибка протокола»
- EPROTONOSUPPORT
-
Ошибка «Протокол не поддерживается»
- EPROTOTYPE
-
Ошибка «Тип протокола не подходит для сокета»
- EPWROFF
-
Ошибка «Питание устройства отключено»
- EQFULL
-
Ошибка «Выходная очередь интерфейса заполнена»
- ERANGE
-
Ошибка «Результат слишком велик»
- EREMCHG
-
Ошибка «Удалённый адрес изменился»
- EREMOTE
-
Ошибка «Объект находится на удалённом узле»
- EREMOTEIO
-
Ошибка «Удалённая ошибка ввода-вывода»
- ERESTART
-
Ошибка «Прерванный системный вызов следует перезапустить»
- ERFKILL
-
Ошибка «Операция невозможна из-за RF-kill»
- EROFS
-
Ошибка «Файловая система доступна только для чтения»
- ERPCMISMATCH
-
Ошибка «Неверная версия RPC»
- ESHLIBVERS
-
Ошибка «Несовпадение версий разделяемой библиотеки»
- ESHUTDOWN
-
Ошибка «Невозможно отправить данные после отключения транспортной конечной точки»
- ESOCKTNOSUPPORT
-
Ошибка «Тип сокета не поддерживается»
- ESPIPE
-
Ошибка «Недопустимое позиционирование»
- ESRCH
-
Ошибка «Такого процесса нет»
- ESRMNT
-
Ошибка «Ошибка монтирования сервера»
- ESTALE
-
Ошибка «Устаревший файловый дескриптор»
- ESTRPIPE
-
Ошибка канала потоков
- ETIME
-
Ошибка «Время таймера истекло»
- ETIMEDOUT
-
Ошибка «Время ожидания подключения истекло»
- ETOOMANYREFS
-
Невозможно выполнить splice
- ETXTBSY
-
Ошибка «Текстовый файл занят»
- EUCLEAN
-
Ошибка «Структуру необходимо очистить»
- EUNATCH
-
Ошибка «Драйвер протокола не подключён»
- EUSERS
-
Ошибка «Слишком много пользователей»
- EWOULDBLOCK
-
Ошибка «Операция привела бы к блокировке»
- EXDEV
-
Ошибка «Недопустимая межустройственная ссылка»
- EXFULL
-
Ошибка «Обмен заполнен»
- NOERROR
-
Нет ошибки
Ruby Core © 1993–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.