модуль 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
Каждый класс в Errno можно создать с необязательными сообщениями:
Errno::EPIPE.new # => #<Errno::EPIPE: Broken pipe>
Errno::EPIPE.new("foo") # => #<Errno::EPIPE: Broken pipe - foo>
Errno::EPIPE.new("foo", "here") # => #<Errno::EPIPE: Broken pipe @ here - foo>
См. SystemCallError.new.
Константы
- 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
-
Ошибка «нет анода»
- 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
-
Ошибка «операция невозможна из-за блокировки радиочастот»
- 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–2025 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.