/* * call-seq: * ios.write(string) => integer * * Writes the given string to <em>ios</em>. The stream must be opened * for writing. If the argument is not a string, it will be converted * to a string using <code>to_s</code>. Returns the number of bytes * written. * * count = $stdout.write( "This is a test\n" ) * puts "That was #{count} bytes of data" * * <em>produces:</em> * * This is a test * That was 15 bytes of data */ static VALUE io_write(io, str) VALUE io, str; { OpenFile *fptr; long n; rb_secure(4); if (TYPE(str) != T_STRING) str = rb_obj_as_string(str); if (TYPE(io) != T_FILE) { /* port is not IO, call write method for it. */ return rb_funcall(io, id_write, 1, str); } if (RSTRING(str)->len == 0) return INT2FIX(0); GetOpenFile(io, fptr); rb_io_check_writable(fptr); n = io_fwrite(str, fptr); if (n == -1L) rb_sys_fail(fptr->path); if (!(fptr->mode & FMODE_SYNC)) { fptr->mode |= FMODE_WBUF; } return LONG2FIX(n); }