Spec-Zone.ru › Ruby 4.0

модуль 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API