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]
Hi --
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
···
On Tue, 29 Jul 2008, andrey wrote:
--
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!
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]
Hi --
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
···
On Mon, Jul 28, 2008 at 8:38 PM, David A. Black <dblack@rubypal.com> wrote:
On Tue, 29 Jul 2008, andrey wrote:
# 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
···
From: John Slobbe [mailto:john.slobbe@gmail.com]
Hi,
At Thu, 31 Jul 2008 10:31:24 +0900,
Peña, 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
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