In vielen Programmiersprachen kann man finden, wenn Datei ausführbar ist oder nicht, durch ein bitwise and zwischen dem mode bits und 0111
, so etwas wie tun: wie 100755
Wie überprüft man, ob die Datei mit bitweisen Operationen in Rust ausführbar ist?
is_exec = (mode & 0111) != 0
Wo mode
stellt das Modus-Bits mit einem Oktalwert etwas, oder 755
.
Befehlszeile Beispiel:
perl -e 'printf "%o\n", (stat "file")[2] & 0111'
Ich versuche, mit diesem Ansatz Rust zu folgen, aber kann es nicht funktioniert, dann ist dies der Code verwende ich:
fn print_dir(path: &PathBuf) {
let files = match fs::read_dir(&path) {
Err(f) => {
println!("{}", f);
return;
}
Ok(f) => f
};
for f in files {
let file = f.unwrap();
let mode = file.metadata().unwrap().permissions().mode();
println!("path: {} {:o} - {} {:0}", file.path().display(), mode, mode, mode & 0111);
}
}
Die mode & 0111
verhält sich nicht wie erwartet, da es immer positive Ergebnisse liefert. Ich habe versucht, einen ähnlichen Code in Go, und es war sehr einfach:
var is_exec bool
if m := f.Mode(); !m.IsDir() && m&0111 != 0 {
is_exec = true
}
Jede Idee, wie diese mit Rust zu tun?