From: "apatniv (Vivek Ak)" <noreply@...>
Date: 2022-04-03T20:56:34+00:00
Subject: [ruby-core:108164] [Ruby master Bug#18676] Misleading Documentation/Bug: Incorrect File.position on a file opened with "a" mode

Issue #18676 has been reported by apatniv (Vivek Ak).

----------------------------------------
Bug #18676: Misleading Documentation/Bug: Incorrect File.position on a file opened with "a" mode
https://bugs.ruby-lang.org/issues/18676

* Author: apatniv (Vivek Ak)
* Status: Open
* Priority: Normal
* ruby -v: ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
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:

``` ruby
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**

``` shell
 ->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`**

``` ruby
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
``` shell
 ->cat /proc/22675/fdinfo/7
pos:    0
flags:  02102001
mnt_id: 30

```



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>