Как я могу читать из необработанного файлового дескриптора?
Я пишу службу активации сокета systemd в Rust. Мой процесс получает открытый файловый дескриптор от systemd.
Существуют ли какие-либо функции ввода-вывода Rust, которые принимают необработанный файловый дескриптор?
Edit: я использую Rust nightly.
2 ответа:
Я думаю, что сейчас лучше всего использовать libc crate для работы с необработанными файловыми дескрипторами.
Перемещение
FileDesc
в частную область было вызвано удалением среды выполнения несколько месяцев назад. Смотрите этот RFC для некоторого дополнительного контекста.std::os::unix
в настоящее время имеет типFd
, и я считаю, что долгосрочная идея состоит в том, чтобы предоставить больше функциональности платформы в этом модуле.
Я просто исследую ржавчину сам, но после поиска немного, придумал следующее использование ящика
native
: (используя файловый дескриптор " 1 " Для примера-1 этоstdout
)extern crate native; use native::io::file::FileDesc as FileDesc; fn main() { let mut f = FileDesc::new(1, true); let buf = "Hello, world!\n".as_bytes(); f.inner_write(buf); }
(проверено с помощью
rustc 0.13.0-nightly
. Обратите внимание, что методinner_write
, возможно, был переименован вwrite
в более поздних версияхlibstd
)Обновление
Ящик
native
был недавно удален из стандартной библиотеки иFileDesc
, хотя все еще существует, посколькуstd::sys::fs::FileDesc
больше не является общедоступным...