From: Eric Wong Date: 2016-04-28T05:46:12+00:00 Subject: [ruby-core:75234] Re: [Ruby trunk Bug#12280] IO.copy_stream(IO, IO) fails with "pread() not implemented" naruse@airemix.jp wrote: > Benoit Daloze wrote: > > For me, having a message like: > > "NotImplementedError: IO.copy_stream with offset is not supported on Windows since it is not atomic" > > would be a good enough fix for this. > > IO.copy_stream is a utility method. > It works as expected and fast if there's a suitable API like sendfile. > > On this precondition, IO.copy_stream should work even on Windows. > You can simply acquire GVL or fine grained lock to achieve multithread safety. Can open files be shared across processes in Windows? If so, thread-safety is not enough; pread provides atomicity across forked processes (and also send_io/recv_io) in *nix; not just threads. > Anyway you can provide pread with ReadFile. > You may know, on Windows read() is our own function and the real name is rb_w32_read. > You can implement rb_w32_pread with ReadFile in win32/win32.c. Anyways, I'll leave Windows devs to implement if it is possible and safe :) Unsubscribe: