Вы можете использовать API Unix -specifi c в стандартной библиотеке, чтобы сделать это, особенно с чертой FromRawFd
:
use std::fs::File;
use std::io::Read;
use std::os::unix::io::{FromRawFd, RawFd};
let fd: RawFd = 3; // example non-standard file descriptor
let mut file = unsafe { File::from_raw_fd(fd) };
// ...
Обратите внимание, что from_raw_fd
говорит следующее:
Эта функция также небезопасна, поскольку возвращаемые в данный момент примитивы имеют договор о том, что они являются единственным владельцем дескриптора файла, который они переносят. Использование этой функции может случайно привести к нарушению этого контракта, что может привести к небезопасной памяти в коде, который полагается на его истинность.
Поэтому необходимо убедиться, что возвращаемый File
обладает уникальным владельцем дескриптор файла (поэтому функция помечена как небезопасная).