Есть ли способ передать файловый дескриптор дочернему процессу, не закрывая его?
Stdio
Тип реализует FromRawFd
, что позволяет мне построить его из любого файлового дескриптора. (В моем случае я хочу использовать трубы.) Это именно то, что мне нужно, но моя проблема в том, что stdin()
/stdout()
/stderr()
методы принимают свой аргумент Stdio
по значению. Это означает, что когда объект Command
выходит из области видимости, все его fd закрываются. Есть ли какой-либо способ дать FD дочернему процессу как бы по ссылке, чтобы он все еще был доступен в Родительском процессе после завершения дочернего процесса? Прямо сейчас Я удовлетворился тем, что просто позвонил libc::dup()
для каждого ребенка, что не кажется большим.
1 ответ:
В настоящее время, увы, нет лучшего решения. Однако правильным решением будет метод
Command::into_io(self) -> (Option<StdIo>, Option<StdIo>, Option<StdIo>)
, который деконструируетCommand
для возврата stdin, stdout и stderr, если они доступны.Я подал Вопрос , чтобы добавить эту функцию.