[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

IO.pos bug?

andrey

7/28/2008 6:31:00 PM

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]
5 Answers

David A. Black

7/28/2008 6:38:00 PM

0

Hi --

On Tue, 29 Jul 2008, andrey wrote:

> 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]

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.r... for details and updates!

Johan Holmberg

7/30/2008 12:08:00 AM

0

On Mon, Jul 28, 2008 at 8:38 PM, David A. Black <dblack@rubypal.com> wrote:
> Hi --
>
> On Tue, 29 Jul 2008, andrey wrote:
>
>> 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]
>
> It works OK in 1.8.6:
>
[...]
>
> 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

7/30/2008 6:28:00 PM

0

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>


andrey wrote:
> 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]
>
>
>




Peña, Botp

7/31/2008 1:31:00 AM

0

From: John Slobbe [mailto:john.slobbe@gmail.com]=20
# Same here...on ruby 1.8.7 (2008-06-20 patchlevel 22) [i686-linux]
# irb(main):001:0> f =3D File.new("/etc/hosts")
# =3D> #<File:/etc/hosts>
# irb(main):002:0> f.sysread(5)
# =3D> "#\n# /"
# irb(main):003:0> f.pos
# =3D> 5
# irb(main):004:0> f.sysread(10)
# =3D> "etc/hosts:"
# irb(main):005:0> f.pos
# =3D> 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
=3D> nil

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

hth.
kind regards -botp


Nobuyoshi Nakada

7/31/2008 7:27:00 AM

0

Hi,

At Thu, 31 Jul 2008 10:31:24 +0900,
Pe=F1a, Botp <botp@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
>=20
> 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.

--=20
Nobu Nakada