static public Method

IO.read(...)

IO.read(name, [length [, offset]] )    string

Opens the file, optionally seeks to the given offset, then returns length bytes (defaulting to the rest of the file). read ensures the file is closed before returning.

IO.read("testfile")           #=> "This is line one\nThis is line two\nThis is line three\nAnd so on...\n"
IO.read("testfile", 20)       #=> "This is line one\nThi"
IO.read("testfile", 20, 10)   #=> "ne one\nThis is line "

Source Code

/*
*  call-seq:
*     IO.read(name, [length [, offset]] )   => string
*  
*  Opens the file, optionally seeks to the given offset, then returns
*  <i>length</i> bytes (defaulting to the rest of the file).
*  <code>read</code> ensures the file is closed before returning.
*     
*     IO.read("testfile")           #=> "This is line one\nThis is line two\nThis is line three\nAnd so on...\n"
*     IO.read("testfile", 20)       #=> "This is line one\nThi"
*     IO.read("testfile", 20, 10)   #=> "ne one\nThis is line "
*/

static VALUE
rb_io_s_read(argc, argv, io)
   int argc;
   VALUE *argv;
   VALUE io;
{
   VALUE fname, offset;
   struct foreach_arg arg;

   rb_scan_args(argc, argv, "12", &fname, &arg.sep, &offset);
   SafeStringValue(fname);

   arg.argc = argc ? 1 : 0;
   arg.io = rb_io_open(RSTRING(fname)->ptr, "r");
   if (NIL_P(arg.io)) return Qnil;
   if (!NIL_P(offset)) {
       rb_io_seek(arg.io, offset, SEEK_SET);
   }
   return rb_ensure(io_s_read, (VALUE)&arg, rb_io_close, arg.io);
}
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.