Maintenance Ruby 3.3 gets fixes, but no new features. Switch to Ruby 4.0 →
IO::Buffer#pwrite
static VALUE
io_buffer_pwrite(int argc, VALUE *argv, VALUE self)
{
rb_check_arity(argc, 2, 4);
VALUE io = argv[0];
rb_off_t from = NUM2OFFT(argv[1]);
size_t length, offset;
io_buffer_extract_length_offset(self, argc-2, argv+2, &length, &offset);
return rb_io_buffer_pwrite(self, io, from, length, offset);
}
Write at least length bytes from the buffer starting at offset, into the io starting at the specified from position. If an error occurs, return -errno.
If length is not given or nil, it defaults to the size of the buffer minus the offset, i.e. the entire buffer.
If length is zero, exactly one pwrite operation will occur.
If offset is not given, it defaults to zero, i.e. the beginning of the buffer.
If the from position is beyond the end of the file, the gap will be filled with null (0 value) bytes.
out = File.open('output.txt', File::RDWR) # open for read/write, no truncation IO::Buffer.for('1234567').pwrite(out, 2, 3, 1)
This leads to 234 (3 bytes, starting from position 1) being written into output.txt, starting from file position 2.