ts notes correctly:
> pigeon% b.rb
> 183
> 183
> 190

So I try to fix that one:

% type file_size_2.rb
#!/usr/bin/ruby
class File
   def size
      File.size(self.path)
   end
end
 
fname = "file_size_test.rb"
p File.size(fname)
a = File.new(fname, "a")
a.print "__END__\n"
p a.flush.size
  #^^^^^^
a.close
p File.size(fname)

% ruby file_size_2.rb
227
236
236

IMHO it's ok to require the programmer to flush before querying. Thus,
File#size would return the physical size; which may differ from the logical
size as data is still buffered.

Of course we should discuss about real semantics and need before
incorporation to Ruby core.

	- Aleksi