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?
Thanks. But I need to get this not just for a single file, but as part of a file scanner.
Performance is key. I haven’t benchmarked yet, but I doubt actually calling stat + parsing is a viable option for me.
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:
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.
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