spicychickensauce
Get proper file creation (birth) time on Linux
File.stat gives me a pretty useless value for ctime. As documented it is “the last time the file or the inode was changed“.
Using stat via bash gives me a correct creation time via the Birth field.
I understand why that’s the case, as Elixir just calls out to :file.read_file_info and the birth field is a somewhat recent thing in Linux and I could not find a way to read it yet from Erlang.
Does anyone know of a way to get that field without shelling out to bash? Is there maybe a package that has implemented a NIF for that?
Or do I need to write my own NIF?
If so, Rust seems to get this one right: Metadata in std::fs - Rust
Most Liked
spicychickensauce
Yeah, I wouldn’t call 2017 new, but I guess new enough that it’s not in all standard libraries yet.
Python also doesn’t have it, but ruby, node, rust and zig do.
Anyway, I went ahead with the plan and created a small rustler NIF:
https://github.com/spicychickensauce/file_statx
Now I just need to figure out how to publish this to hex such that a user doesn’t need to compile the thing?
Looks like rustler_precompiled is the way to go.
joram
It does not, it calls fstat. It looks like on Windows the ctime is the same as Rust’s created.
garrison
I was quite surprised Python didn’t have it; they usually have everything. Apparently there has been an open issue/PR for several years now. Strangely it seems to have become active again recently.
A nif seems like the way to go but maybe also consider opening an Erlang/OTP issue as this seems like something that should be updated to me. At least before 2038 ![]()
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








