システムコールが失敗した時に発生する例外です。実際には
SystemCallError
そのものではなく、サブクラスである Errno
モジュールの内部クラス(各errno
と同じ名前)です。
SystemCallError === other ((<ruby 1.7 feature>))
other が SystemCallError
のサブクラスであれば真です。
(Module#=== と同じ)。
また、左辺が SystemCallError のサブクラスである場合、
other.errno
の値(nil
ならば そのクラスの
Errno 定数の値)が
self::Errno
と同じ場合に真を返します。
このメソッドにより、システムによって errno が同じ値の例外に対して 以下の例のように捕捉できるようになっています。
p Errno::EAGAIN::Errno p Errno::EWOULDBLOCK::Errno begin raise Errno::EAGAIN, "pseudo error" rescue Errno::EWOULDBLOCK p $! end # => 11 11 #<Errno::EAGAIN: pseudo error>
errno
システムから返された errno の値を返します。
実際にシステムコールエラーが発生してなければ nil
を返します。
例:
後半の例のように raiseによって故意にエラーが発生しているかのように 見せかける場合は注意してください。 begin open("nonexistent file") rescue Errno::ENOENT p Errno::ENOENT::Errno # => 2 p $!.errno # => 2 end begin raise Errno::ENOENT rescue Errno::ENOENT p Errno::ENOENT::Errno # => 2 p $!.errno # => nil end
まだ発生してない例外に対応する errno の値を知りたい場合は Errno::EXXX::Errno 定数を使用してください。