Доступ к нестандартным файловым дескрипторам дочернего процесса - PullRequest
1 голос
/ 08 января 2020

У меня есть дочерний процесс, который имеет входы / выходы (каналы) для нестандартных файловых дескрипторов (не для fd0 / stdin, fd1 / stdout, fd2 / stderr).

Как я могу получить к ним доступ? Я не вижу нигде в документации, которая позволяет это, или, возможно, я что-то упускаю: https://doc.rust-lang.org/std/process/struct.Stdio.html

Это должно работать для Windows и Ma c.

1 Ответ

0 голосов
/ 08 января 2020

Вы можете использовать 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 обладает уникальным владельцем дескриптор файла (поэтому функция помечена как небезопасная).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...