class SystemCallError
SystemCallError is the base class for all low-level platform-dependent errors.
The errors available on the current platform are subclasses ofSystemCallError and are defined in theErrno module.
File.open("does/not/exist")
raises the exception:
Errno::ENOENT: No such file or directory - does/not/exist
Public Class Methods
Source
static VALUEsyserr_eqq(VALUE self, VALUE exc){ VALUE num, e; if (!rb_obj_is_kind_of(exc, rb_eSystemCallError)) { if (!rb_respond_to(exc, id_errno)) return Qfalse; } else if (self == rb_eSystemCallError) return Qtrue; num = rb_attr_get(exc, id_errno); if (NIL_P(num)) { num = rb_funcallv(exc, id_errno, 0, 0); } e = rb_const_get(self, id_Errno); return RBOOL(FIXNUM_P(num) ? num == e : rb_equal(num, e));}Returntrue if the receiver is a genericSystemCallError, or if the error numbersself andother are the same.
Source
static VALUEsyserr_initialize(int argc, VALUE *argv, VALUE self){ const char *err; VALUE mesg, error, func, errmsg; VALUE klass = rb_obj_class(self); if (klass == rb_eSystemCallError) { st_data_t data = (st_data_t)klass; rb_scan_args(argc, argv, "12", &mesg, &error, &func); if (argc == 1 && FIXNUM_P(mesg)) { error = mesg; mesg = Qnil; } if (!NIL_P(error) && st_lookup(syserr_tbl, NUM2LONG(error), &data)) { klass = (VALUE)data; /* change class */ if (!RB_TYPE_P(self, T_OBJECT)) { /* insurance to avoid type crash */ rb_raise(rb_eTypeError, "invalid instance type"); } RBASIC_SET_CLASS(self, klass); } } else { rb_scan_args(argc, argv, "02", &mesg, &func); error = rb_const_get(klass, id_Errno); } if (!NIL_P(error)) err = strerror(NUM2INT(error)); else err = "unknown error"; errmsg = rb_enc_str_new_cstr(err, rb_locale_encoding()); if (!NIL_P(mesg)) { VALUE str = StringValue(mesg); if (!NIL_P(func)) rb_str_catf(errmsg, " @ %"PRIsVALUE, func); rb_str_catf(errmsg, " - %"PRIsVALUE, str); } mesg = errmsg; rb_call_super(1, &mesg); rb_ivar_set(self, id_errno, error); return self;}Iferrno corresponds to a known system error code, constructs the appropriateErrno class for that error, otherwise constructs a genericSystemCallError object. The error number is subsequently available via theerrno method.
If only numeric object is given, it is treated as anIntegererrno, andmsg is omitted, otherwise the first argumentmsg is used as the additional error message.
SystemCallError.new(Errno::EPIPE::Errno)#=> #<Errno::EPIPE: Broken pipe>SystemCallError.new("foo")#=> #<SystemCallError: unknown error - foo>SystemCallError.new("foo",Errno::EPIPE::Errno)#=> #<Errno::EPIPE: Broken pipe - foo>
Iffunc is notnil, it is appended to the message with “ @”.
SystemCallError.new("foo",Errno::EPIPE::Errno,"here")#=> #<Errno::EPIPE: Broken pipe @ here - foo>
A subclass ofSystemCallError can also be instantiated via thenew method of the subclass. SeeErrno.
Public Instance Methods
Source
static VALUEsyserr_errno(VALUE self){ return rb_attr_get(self, id_errno);}Return this SystemCallError’s error number.