модуль 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
-
Ошибка «Не разрешено в режиме возможностей»
- 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
-
Ошибка «Нет узла»
- 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
-
Ошибка «Недостаточно возможностей»
- 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
-
Ошибка «слишком много ссылок»
- ETXTBSY
-
Ошибка «Текстовый файл занят»
- EUCLEAN
-
Ошибка «Необходима очистка структуры»
- EUNATCH
-
Ошибка «Драйвер протокола не подключен»
- EUSERS
-
Ошибка «Слишком много пользователей»
- EWOULDBLOCK
-
Ошибка «Операция заблокирована»
- EXDEV
-
Ошибка «Неверная междисковая ссылка»
- EXFULL
-
Ошибка «Обменник полон»
- NOERROR
-
Нет ошибки
Ruby Core © 1993–2024 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.