gpt4 book ai didi

linux - 使用 Rust 显示文件元数据,如所有者和组

转载 作者:太空宇宙 更新时间:2023-11-04 09:11:58 24 4
gpt4 key购买 nike

我正在使用递归文件搜索并让它在简单权限下工作,但我无法确定如何获取文件夹或文件的所有者(所有者 ID)或组(组 ID)。我发现了如何获取文件或文件夹的当前权限。我得到一个 uint_32,所以其中大约 9 位用于保存权限。但是时间戳保存在哪里以及如何保存?和主人?在我的研究中,我读到 linux 内核允许系统上超过 40 亿用户。显然这不在我得到的 uint_32 中。

我在 Rust 工作,不害怕编写 C 模块。但现在这是我的 main.rs:

use std::fs::*;
use std::os::unix::fs::MetadataExt;
use std::os::unix::fs::PermissionsExt;
use std::mem::transmute;


fn main(){
let meta = metadata("./test.txt");
if meta.is_ok(){
let m:u32 = meta.unwrap().permissions().mode();
//let bytes: [u8; 4] = unsafe { transmute(m.to_be()) };//etv. used later

print!("{}",if (m & (0x1<<9)) >= 1 {"d"}else{"-"});
print!("{}",if (m & (0x1<<8)) >= 1 {"r"}else{"-"});
print!("{}",if (m & (0x1<<7)) >= 1 {"w"}else{"-"});
print!("{}",if (m & (0x1<<6)) >= 1 {"x"}else{"-"});
print!("{}",if (m & (0x1<<5)) >= 1 {"r"}else{"-"});
print!("{}",if (m & (0x1<<4)) >= 1 {"w"}else{"-"});
print!("{}",if (m & (0x1<<3)) >= 1 {"x"}else{"-"});
print!("{}",if (m & (0x1<<2)) >= 1 {"r"}else{"-"});
print!("{}",if (m & (0x1<<1)) >= 1 {"w"}else{"-"});
println!("{}",if (m & 0x1) >= 1 {"x"}else{"-"});
println!("{:b}",m);
}
}

如果您认为可以,请不要犹豫修改我的代码。

我这样做是为了好玩,也是为了更多地了解地平线下的代码。

最佳答案

std::os::linux::fs::MetadataExt(或 os::unix)提供相关的特定于平台的函数。 Reference .看起来您需要 meta.std_uid()meta.st_gid() 等。顺便说一下,这样编写代码会更好:

if let Ok(meta) = metadata("./test.txt") {
println!("{}", meta.st_gid());
// ...
}

I'm working in rust and would not fear to write a C module

Rust 在这种情况下具有出色的 FFI。例如,您可以添加 libc使用 libc 绑定(bind)创建箱子,然后使用熟悉的 API 调用 libc::stat 函数。

关于linux - 使用 Rust 显示文件元数据,如所有者和组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54530125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com