close_write ()
public
Closes the write 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_write
f . print " nowhere "
produces:
prog . rb : 3 :in `write ' : not opened for writing (IOError)
from prog.rb:3:in `print '
from prog . rb : 3
Show source static VALUE
rb_io_close_write(VALUE io)
{
rb_io_t *fptr;
VALUE write_io;
write_io = GetWriteIO(io);
GetOpenFile(write_io, fptr);
if (is_socket(fptr->fd, fptr->pathv)) {
#ifndef SHUT_WR
# define SHUT_WR 1
#endif
if (shutdown(fptr->fd, SHUT_WR) < 0)
rb_sys_fail_path(fptr->pathv);
fptr->mode &= ~FMODE_WRITABLE;
if (!(fptr->mode & FMODE_READABLE))
return rb_io_close(write_io);
return Qnil;
}
if (fptr->mode & FMODE_READABLE) {
rb_raise(rb_eIOError, "closing non-duplex IO for writing");
}
if (io != write_io) {
GetOpenFile(io, fptr);
fptr->tied_io_for_writing = 0;
fptr->mode &= ~FMODE_DUPLEX;
}
rb_io_close(write_io);
return Qnil;
}