[ruby-core:108166] [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-04 01:00:27 UTC
List:
ruby-core #108166
Issue #18676 has been updated by apatniv (Vivek Ak).
Hi Jeremy. Thanks you for your response. Should we update the documentation to indicate the same so that it help anyone who encounters the same issue?
----------------------------------------
Bug #18676: Misleading Documentation/Bug: Incorrect File.position on a file opened with "a" mode
https://bugs.ruby-lang.org/issues/18676#change-97140
* Author: apatniv (Vivek Ak)
* Status: Rejected
* 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>