Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

IO.pos bug?

0 views
Skip to first unread message

andrey

unread,
Jul 28, 2008, 2:31:06 PM7/28/08
to
irb(main):001:0> f = File.new("/etc/host.conf")
=> #<File:/etc/host.conf>
irb(main):002:0> f.gets
=> "multi off\n"
irb(main):003:0> f.pos
=> 10
irb(main):004:0> f.gets
=> "order hosts,bind\n"
irb(main):005:0> f.pos
=> 27
irb(main):006:0> f.close
=> nil

All right.

irb(main):007:0> f = File.new("/etc/host.conf")
=> #<File:/etc/host.conf>
irb(main):008:0> f.sysread(5)
=> "multi"
irb(main):009:0> f.pos
=> 5
irb(main):010:0> f.sysread(10)
=> " off\norder"
irb(main):011:0> f.pos
=> 5

Bug?
% ruby1.8 --version
ruby 1.8.5 (2006-08-25) [i486-linux]

David A. Black

unread,
Jul 28, 2008, 2:38:26 PM7/28/08
to
Hi --

It works OK in 1.8.6:

irb(main):001:0> f = File.new("/etc/hosts")
=> #<File:/etc/hosts>
irb(main):002:0> f.sysread(5)
=> "##\n# "
irb(main):003:0> f.pos
=> 5
irb(main):004:0> f.sysread(10)
=> "Host Datab"
irb(main):005:0> f.pos
=> 15

I don't think 1.8.5 is supported any more, so it might be good to
update your installation if possible.


David

--
Rails training from David A. Black and Ruby Power and Light:
* Advancing With Rails August 18-21 Edison, NJ
* Co-taught by D.A. Black and Erik Kastner
See http://www.rubypal.com for details and updates!

Johan Holmberg

unread,
Jul 29, 2008, 8:07:55 PM7/29/08
to
[...]

>
> I don't think 1.8.5 is supported any more, so it might be good to
> update your installation if possible.
>
> David
>

It works for me with 1.8.5 too:

irb(main):007:0> f = File.new("/tmp/jhjh")
=> #<File:/tmp/jhjh>


irb(main):008:0> f.sysread(5)
=> "multi"
irb(main):009:0> f.pos
=> 5
irb(main):010:0> f.sysread(10)
=> " off\norder"
irb(main):011:0> f.pos

=> 15

$ ruby -v
ruby 1.8.5 (2006-08-25) [powerpc-darwin8.8.0]

I have built this "ruby" myself from source (but note that it is on
Mac OS X, not Linux).

/Johan Holmberg

John Slobbe

unread,
Jul 30, 2008, 2:28:05 PM7/30/08
to
Same here...on ruby 1.8.7 (2008-06-20 patchlevel 22) [i686-linux]

Regards, John.

irb(main):001:0> f = File.new("/etc/hosts")
=> #<File:/etc/hosts>
irb(main):002:0> f.sysread(5)

=> "#\n# /"
irb(main):003:0> f.pos


=> 5
irb(main):004:0> f.sysread(10)

=> "etc/hosts:"
irb(main):005:0> f.pos
=> 5
irb(main):006:0>

Peña, Botp

unread,
Jul 30, 2008, 9:31:24 PM7/30/08
to
From: John Slobbe [mailto:john....@gmail.com]
# Same here...on ruby 1.8.7 (2008-06-20 patchlevel 22) [i686-linux]
# irb(main):001:0> f = File.new("/etc/hosts")
# => #<File:/etc/hosts>
# irb(main):002:0> f.sysread(5)
# => "#\n# /"
# irb(main):003:0> f.pos
# => 5
# irb(main):004:0> f.sysread(10)
# => "etc/hosts:"
# irb(main):005:0> f.pos
# => 5

i seem to remember (don't know where/when) that you must not mix low level calls like #sysread w highlevel calls like #pos, use #read with #pos, or use #sysread w #sysseek

but i guess we need a confirmation fr the core dev to verify that. Nobu perhaps?

eg,

irb(main):016:0> File.open "/etc/hosts" do |f|
irb(main):017:1* f.sysread 2
irb(main):018:1> p f.sysseek(0,IO::SEEK_CUR)
irb(main):019:1> f.sysread 10
irb(main):020:1> p f.sysseek(0,IO::SEEK_CUR)
irb(main):021:1> end
2
12
=> nil

irb(main):022:0> RUBY_VERSION
=> "1.8.7"

hth.
kind regards -botp


Nobuyoshi Nakada

unread,
Jul 31, 2008, 3:26:47 AM7/31/08
to
Hi,

At Thu, 31 Jul 2008 10:31:24 +0900,
Peña, Botp <bo...@delmonte-phil.com> wrote in [ruby-talk:309630]:


> i seem to remember (don't know where/when) that you must not
> mix low level calls like #sysread w highlevel calls like
> #pos, use #read with #pos, or use #sysread w #sysseek
>
> but i guess we need a confirmation fr the core dev to verify
> that. Nobu perhaps?

You're correct, it depends on underlying libc, since 1.8 uses
stdio. 1.9 has its own buffering mechanism and doesn't have
that issue.

--
Nobu Nakada

0 new messages