Project

General

Profile

Actions

Feature #21205

open

Make File::Stat#birthtime available on Linux

Added by BertramScharpf (Bertram Scharpf) 2 days ago. Updated 1 day ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:121475]

Description

Not that I would run into any problem with it, but this behaviour is confusing:

RbConfig::CONFIG["platform"]     #=> "amd64-freebsd14"
(File.birthtime "/").class       #=> Time
(File.stat "/").birthtime.class  #=> Time

RbConfig::CONFIG["platform"]     #=> "x86_64-linux"
(File.birthtime "/").class       #=> Time
(File.stat "/").birthtime        # raises NotImplementedError

Updated by byroot (Jean Boussier) 2 days ago

Contrary to FreeBSD, on Linux the birthtime isn't present in the struct returned by stat(2): https://man7.org/linux/man-pages/man3/stat.3type.html (see how there is no btime).

What File.birthtime does, it that it uses statx(2) https://man7.org/linux/man-pages/man2/statx.2.html

So the only way to fix the weirdness you point out, would be for File.stat to actually use statx(2) under the hood.

But it returns a lot more data, so there might be some performance considerations.

That being said, perhaps we should do it for correctness, because unless I'm mistaken, on Linux stat(2) return 32bit time, so it will wrap around in 2038. statx(2) returns 64-bit timestamps, so it seems that Linux want users to migrate to statx(2) eventually.

Updated by BertramScharpf (Bertram Scharpf) 1 day ago

byroot (Jean Boussier) wrote in #note-1:

Contrary to FreeBSD, on Linux the birthtime isn't present in the struct returned by stat(2): https://man7.org/linux/man-pages/man3/stat.3type.html (see how there is no btime).

I know. I did research about that but gave up.

This is how I solved my problem for now: https://github.com/BertramScharpf/rbfind/commit/e6ed59668cb5707f4519272401113a8173f819af.

Updated by byroot (Jean Boussier) 1 day ago

  • Tracker changed from Bug to Feature
  • Subject changed from File::Stat#birthtime is available on Linux to Make File::Stat#birthtime available on Linux
  • ruby -v deleted (ruby 3.3.7 (2025-01-15 revision be31f993d7) [x86_64-linux])
  • Backport deleted (3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN)

Switching this to a feature request.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0