[#35446] [Ruby 1.9 - Bug #4477][Open] Kernel:exec and backtick (`) don't work for certain system commands — Joachim Wuttke <j.wuttke@...>

10 messages 2011/03/07

[#35476] [Ruby 1.9 - Bug #4489][Open] [PATCH] Encodings with /-(unix|dos|mac)\Z/ — "James M. Lawrence" <quixoticsycophant@...>

20 messages 2011/03/10

[#35552] [Ruby 1.9 - Feature #4523][Open] Kernel#require to return the path of the loaded file — Alex Young <alex@...>

14 messages 2011/03/24

[#35565] [Ruby 1.9 - Feature #4531][Open] [PATCH 0/7] use poll() instead of select() in certain cases — Eric Wong <normalperson@...>

33 messages 2011/03/28

[#35566] [Ruby 1.9 - Feature #4532][Open] [PATCH] add IO#pread and IO#pwrite methods — Eric Wong <normalperson@...>

12 messages 2011/03/28

[#35586] [Ruby 1.9 - Feature #4538][Open] [PATCH (cleanup)] avoid unnecessary select() calls before doing I/O — Eric Wong <normalperson@...>

9 messages 2011/03/29

[ruby-core:35584] Re: [Ruby 1.9 - Feature #4532][Open] [PATCH] add IO#pread and IO#pwrite methods

From: Eric Wong <normalperson@...>
Date: 2011-03-29 17:47:54 UTC
List: ruby-core #35584
KOSAKI Motohiro <kosaki.motohiro@gmail.com> wrote:
> 2011/3/29 Eric Wong <normalperson@yhbt.net>:
> > KOSAKI Motohiro <kosaki.motohiro@gmail.com> wrote:
> >> Do we really need to introduce new method? Why can't we overload
> >> IO.read and IO.write?
> >> too complex?
> >
> > IO#read and IO#write take userspace buffers into account which
> > makes no sense with pread/pwrite.
> 
> userspace buffer is implementation detail. no?

It's a very important detail.  Different processes don't share userspace
buffers and Ruby should be able to share buffers with others (non-Ruby
processes), so we must only use the kernel cache.

> And, If pread is always behave as binary mode read method, your
> documentation is much misleading. IMHO.
> 
>  *     f = File.new("testfile")
>  *     f.pread(16, 0)   #=> "This is line one"

Yes, I just copied docs from sysread/syswrite :x  I will update them
in the next patch I post.

> > I'm not a fan of throwing NotImplementedError and faking with lseek() +
> > read()/write() to be even worse since it loses the atomicity guarantee.
> 
> I disagree. I dislike following part of your patch.
> 
> #ifdef HAVE_PREAD
>     rb_define_method(rb_cIO, "pread", rb_io_pread, -1);
> #endif
> 
> This is very wrong style for new method. Eventually,  *all* users need to call
> method_defined? before pread. Just NotImplementedError (or lseek emulation)
> makes much simpler script.

OK, shall I resubmit with adding optional offset argument to
sysread/syswrite and raise NotImplementedError?

Thank you again for your comments!

-- 
Eric Wong

In This Thread