В linux дескрипторы файлов, хранящиеся в текущем процессе, можно найти в /proc/self/fd
. Они выглядят и действуют как символические ссылки на исходные файлы (хотя я думаю, что технически они могут быть чем-то другим - возможно, кто-то, кто знает больше, может вмешаться).
Таким образом, вы можете восстановить (возможно измененное) имя файла, построив правильный путь в /proc/self/fd
с использованием вашего файлового дескриптора, а затем следуя символической ссылке обратно в файловую систему.
В этом фрагменте показаны шаги:
use std::fs::read_link;
use std::os::unix::io::AsRawFd;
use std::path::PathBuf;
// if f is your std::fs::File
// first construct the path to the symlink under /proc
let path_in_proc = PathBuf::from(format!("/proc/self/fd/{}", f.as_raw_fd()));
// ...and follow it back to the original file
let new_file_name = read_link(path_in_proc).unwrap();