Как я могу читать из необработанного файлового дескриптора?


Я пишу службу активации сокета systemd в Rust. Мой процесс получает открытый файловый дескриптор от systemd.

Существуют ли какие-либо функции ввода-вывода Rust, которые принимают необработанный файловый дескриптор?

Edit: я использую Rust nightly.

2 5

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 больше не является общедоступным...