Project

General

Profile

Actions

Bug #18676

closed

Misleading Documentation/Bug: Incorrect File.position on a file opened with "a" mode

Added by apatniv (Vivek Ak) over 2 years ago. Updated over 2 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]
[ruby-core:108164]

Description

Documentation says that whenever a file is opened in "a" mode, the stream is positioned at the end of stream. However, #tell method returns 0 instead of the size of the file. (https://ruby-doc.org/core-3.1.1/IO.html#class-IO-label-Position)

Issue happens with latest version of ruby 3.1.1 as well.

How to reproduce:

cat code_to_reproduce.txt 

fp = File.open("sample_data.txt", "a")

puts "File size=#{fp.size} position=#{fp.tell}"

Output: See the position value

 ->ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]

 ->wc sample_data.txt 
 1  2 12 sample_data.txt
 ->cat sample_data.txt 
hello world

 ->ruby code_to_reproduce.txt 
File size=12 position=0

 ->cat code_to_reproduce.txt 

fp = File.open("sample_data.txt", "a")

puts "File size=#{fp.size} position=#{fp.tell}"

Further debugging with irb

rb(main):009:0> fp = File.open("sample_data.txt", "a")
irb(main):010:0> fp.tell
=> 0
irb(main):011:0> fp.size
=> 12
irb(main):012:0> fp.fileno
=> 7
irb(main):013:0> Process.pid
=> 22675

Examining the offset in /proc filesytem

 ->cat /proc/22675/fdinfo/7
pos:    0
flags:  02102001
mnt_id: 30

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0