我正在进行递归文件搜索,并使其具有简单的权限即可使用,但是我无法确定如何获取文件夹或文件的所有者(所有者ID)或组(组ID)。我发现了如何获取文件或文件夹的当前权限。我得到一个uint_32,因此其中约9位用于保存权限。但是时间戳保存在哪里以及如何保存?和主人?在我的研究中,我读到linux内核允许系统上超过40亿用户。显然,这不在我得到的uint_32中。
我正在生锈,不怕编写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);
}
}
如果您愿意,请随时修改我的代码。
我这样做是为了娱乐,并进一步了解地平线下的代码。
答案 0 :(得分:1)
所有者为meta.unwrap().
uid()
,组为meta.unwrap().
gid()
。它们分别为u32
,这是Linux所使用的。
要获取实际名称,请使用libc::getpwuid_r和libc::getgrgid_r。另请参见getpwuid(3)和getgrgid(3)。
答案 1 :(得分:1)