public Method

IO.close_read

ios.close_read     nil

Closes the read end of a duplex I/O stream (i.e., one that contains both a read and a write stream, such as a pipe). Will raise an IOError if the stream is not duplexed.

f = IO.popen("/bin/sh","r+")
f.close_read
f.readlines

produces:

prog.rb:3:in `readlines': not opened for reading (IOError)
 from prog.rb:3

Source Code

/*
*  call-seq:
*     ios.close_read    => nil
*  
*  Closes the read end of a duplex I/O stream (i.e., one that contains
*  both a read and a write stream, such as a pipe). Will raise an
*  <code>IOError</code> if the stream is not duplexed.
*     
*     f = IO.popen("/bin/sh","r+")
*     f.close_read
*     f.readlines
*     
*  <em>produces:</em>
*     
*     prog.rb:3:in `readlines': not opened for reading (IOError)
*      from prog.rb:3
*/

static VALUE
rb_io_close_read(io)
   VALUE io;
{
   OpenFile *fptr;
   int n;

   if (rb_safe_level() >= 4 && !OBJ_TAINTED(io)) {
       rb_raise(rb_eSecurityError, "Insecure: can't close");
   }
   GetOpenFile(io, fptr);
   if (fptr->f2 == 0 && (fptr->mode & FMODE_WRITABLE)) {
       rb_raise(rb_eIOError, "closing non-duplex IO for reading");
   }
   if (fptr->f2 == 0) {
       return rb_io_close(io);
   }
   n = fclose(fptr->f);
   fptr->mode &= ~FMODE_READABLE;
   fptr->f = fptr->f2;
   fptr->f2 = 0;
   if (n != 0) rb_sys_fail(fptr->path);

   return Qnil;
}
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.