diff --git a/io.c b/io.c index 2a5a645..91178a6 100644 --- a/io.c +++ b/io.c @@ -7339,11 +7339,51 @@ select_end(VALUE arg) * IO.select(read_array * [, write_array * [, error_array - * [, timeout]]] )-> array or nil + * [, timeout]]]) -> array or nil * - * See Kernel#select. + * Calls select(2) system call. + * It monitors given arrays of IO objects, waits one or more + * of IO objects ready for reading, are ready for writing, + * and have pending exceptions respectably, and returns an array that + * contains arrays of those IO objects. It will return nil + * if optional timeout value is given and no IO object + * is ready in timeout seconds. + * + * === Parameters + * read_array:: an array of IO objects that wait until ready for read + * write_array:: an array of IO objects that wait until ready for write + * error_array:: an array of IO objects that wait for exceptions + * timeout:: a numeric value in second + * + * === Example + * + * rp, wp = IO.pipe + * mesg = "ping " + * 100.times { + * rs, ws, = IO.select([rp], [wp]) + * if r = rs[0] + * ret = r.read(5) + * print ret + * case ret + * when /ping/ + * mesg = "pong\n" + * when /pong/ + * mesg = "ping " + * end + * end + * if w = ws[0] + * w.write(mesg) + * end + * } + * + * produces: + * + * ping pong + * ping pong + * ping pong + * (snipped) + * ping */ - static VALUE rb_f_select(int argc, VALUE *argv, VALUE obj) {