modul Errno

Wenn ein Betriebssystem einen Fehler feststellt, meldet es diesen in der Regel als Integer-Fehlercode.

$ ls nosuch.txt
ls: cannot access 'nosuch.txt': No such file or directory
$ echo $? # Code for last error.
2

Wenn der Ruby-Interpreter mit dem Betriebssystem interagiert und einen solchen Fehlercode erhält (z. B. 2), ordnet er diesen Code einer bestimmten Ruby-Ausnahmeklasse zu (z. B. Errno::ENOENT).

File.open('nosuch.txt')
# => No such file or directory @ rb_sysopen - nosuch.txt (Errno::ENOENT)

Jede dieser Klassen ist

Daher

Errno::ENOENT.superclass # => SystemCallError
Errno::ENOENT::Errno     # => 2

Die Namen der verschachtelten Klassen werden von der Methode Errno.constants zurückgegeben.

Errno.constants.size         # => 158
Errno.constants.sort.take(5) # => [:E2BIG, :EACCES, :EADDRINUSE, :EADDRNOTAVAIL, :EADV]

Wie oben gezeigt, ist der Fehlercode, der jeder Klasse zugeordnet ist, als Wert einer Konstante verfügbar; der Wert für eine bestimmte Klasse kann je nach Betriebssystem variieren. Wenn die Klasse für das jeweilige Betriebssystem nicht benötigt wird, ist der Wert Null.

Errno::ENOENT::Errno      # => 2
Errno::ENOTCAPABLE::Errno # => 0

Jede Klasse in Errno kann mit optionalen Meldungen erstellt werden.

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>

Siehe SystemCallError.new.