how do I get the uid and gid of a file? I’ve searched through the official documentation but still don’t quite understand how to do it.
You have to drop to platform specific APIs, Io doesn’t provide it because that information isn’t available on all supported platforms.
I think?? it might change in the future
Since std.posix has been nuked, you have to go even lower to std.os.your_os_here.
Assuming you’re on linux:
const linux = std.os.linux;
var statx: linux.Statx = undefined;
// there is a `BASIC_STATS` decl which includes uid, gid and other common stats
const errno = linux.errno(linux.statx(io_file.handle, "", linux.AT.EMPTY_PATH, .{ .GID = true, .UID = true }, &statx));
switch (errno) {
.SUCCESS => {},
.ACCES => {},
.BADF => {},
.FAULT => {},
.INVAL => {},
.LOOP => {},
.NAMETOOLONG => {},
.NOENT => {},
.NOMEM => {},
.NOTDIR => {},
// no other errors are possible
else => unreachable,
}
// only these are filled due to the mask passed
const uid, const gid = .{ statx.uid, statx.gid };
My guess is that you’ll need to go through std.os.linux.statx() (e.g. Zig Documentation which populates a StatX struct: Zig Documentation, and this has uid and gid).
It’s probably not part of the generic std.Io interface because uid and gid are not portable.
In case you need to get and set, there is nowstd.Io.File.Permissions. You have setPermissions() function as well.