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


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

1 4

1 ответ:

В настоящее время, увы, нет лучшего решения. Однако правильным решением будет метод Command::into_io(self) -> (Option<StdIo>, Option<StdIo>, Option<StdIo>), который деконструирует Command для возврата stdin, stdout и stderr, если они доступны.

Я подал Вопрос , чтобы добавить эту функцию.