module 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。
Constants
- E2BIG
-
“参数列表太长”错误
- EACCES
-
“权限被拒绝”错误
- EADDRINUSE
-
“地址已在使用中”错误
- EADDRNOTAVAIL
-
“地址不可用”错误
- EADV
-
“广告错误”错误
- EAFNOSUPPORT
-
“地址族不受支持”错误
- EAGAIN
-
“资源暂时不可用,请重试(可能与
EWOULDBLOCK的值相同)”错误 - EALREADY
-
“连接已在进行中”错误
- EAUTH
-
“身份验证错误”错误
- EBADARCH
-
“可执行文件中的 CPU 类型错误”错误
- EBADE
-
“交换错误”错误
- EBADEXEC
-
“可执行文件错误”错误
- EBADF
-
“文件描述符错误”错误
- EBADFD
-
“文件描述符状态错误”错误
- EBADMACHO
-
“Mach-O 文件格式错误”错误
- 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
-
“不适合的 I/O 控制操作”错误
- ENOTUNIQ
-
“网络上的名称不唯一”错误
- ENXIO
-
“没有这样的设备或地址”错误
- EOPNOTSUPP
-
“套接字不支持该操作”错误
- EOVERFLOW
-
“值对于数据类型来说太大,无法存储”错误
- EOWNERDEAD
-
“所有者已死”错误
- EPERM
-
“操作不允许”错误
- EPFNOSUPPORT
-
“协议族不受支持”错误
- EPIPE
-
“管道破裂”错误
- EPROCLIM
-
“进程过多”错误
- EPROCUNAVAIL
-
“程序过程错误”错误
- EPROGMISMATCH
-
“程序版本错误”错误
- EPROGUNAVAIL
-
“RPC 程序不可用”错误
- EPROTO
-
“协议错误”错误
- EPROTONOSUPPORT
-
“协议不受支持”错误
- EPROTOTYPE
-
“套接字协议类型错误”错误
- EPWROFF
-
“设备电源已关闭”错误
- EQFULL
-
“接口输出队列已满”错误
- ERANGE
-
“结果太大”错误
- EREMCHG
-
“远程地址已更改”错误
- EREMOTE
-
“对象是远程的”错误
- EREMOTEIO
-
“远程 I/O 错误”错误
- ERESTART
-
“中断的系统调用应重新启动”错误
- ERFKILL
-
“由于 RF-kill 操作不允许”错误
- EROFS
-
“只读文件系统”错误
- ERPCMISMATCH
-
“RPC 版本错误”错误
- ESHLIBVERS
-
“共享库版本不匹配”错误
- ESHUTDOWN
-
“传输端点关闭后无法发送”错误
- ESOCKTNOSUPPORT
-
“套接字类型不受支持”错误
- ESPIPE
-
“非法寻道”错误
- ESRCH
-
“没有这样的进程”错误
- ESRMNT
-
“服务器挂载错误”错误
- ESTALE
-
“文件句柄过时”错误
- ESTRPIPE
-
“Streams 管道错误”错误
- ETIME
-
“计时器已过期”错误
- ETIMEDOUT
-
“连接超时”错误
- ETOOMANYREFS
-
无法拼接“错误
- ETXTBSY
-
“文本文件忙”错误
- EUCLEAN
-
“结构需要清理”错误
- EUNATCH
-
“协议驱动程序未 attached”错误
- EUSERS
-
“用户过多”错误
- EWOULDBLOCK
-
“操作会阻塞”错误
- EXDEV
-
“无效的跨设备链接”错误
- EXFULL
-
“交换区已满”错误
- NOERROR
-
无错误