[ruby-core:108164] [Ruby master Bug#18676] Misleading Documentation/Bug: Incorrect File.position on a file opened with "a" mode
From:
"apatniv (Vivek Ak)" <noreply@...>
Date:
2022-04-03 20:56:34 UTC
List:
ruby-core #108164
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>