我的工作递归文件搜索,并得到了它与简单的权限的工作,但我不能确定的是如何得到一个文件夹或文件的所有者(所有者ID)或基团(组ID)。我发现如何得到一个文件或文件夹的当前权限。我得到一个uint_32使约9的这个位被用来保存权限。但是,在何处以及如何被时间戳保存?和老板?在我的研究,我读过的Linux内核,允许超过4个十亿用户的系统上。显然,这不是在我得到了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);
}
}
不要犹豫,修改我的代码,如果你这样认为。
我这样做是为了好玩,并更多地了解地平线下面的代码。
店主是meta.unwrap().
uid()
和组是meta.unwrap().
gid()
。他们u32
每个,这是Linux使用。
要获得实际的名称,使用libc::getpwuid_r和libc::getgrgid_r。参见getpwuid(3)和getgrgid(3)。