Как добавить дополнительные каналы stdio к созданной команде? - PullRequest
0 голосов
/ 04 августа 2020

В Node.js, spawn позволяет добавлять дополнительные каналы stdio . Кукловод использует это для создания каналов для связи с Chrome процессом без головы. В этом случае Chrome ожидает, что эти каналы всегда будут существовать как файловые дескрипторы 3 и 4 (после stdin, stdout и stderr).

Кажется, нет способа сделать это в:

В этой статье описывается, как создать канал без FD_CLOEXEC с использованием lib c, что звучит как шаг в правильном направлении. Похоже, ящик nix может сделать это более дружелюбным (по крайней мере, немного менее небезопасным).

Насколько я понимаю, мне нужно:

  1. Создать два pipe без FD_CLOEXEC (допустим, у них есть FD 8 и 9)
  2. fork
  3. У ребенка close любые FD от 2 до 8
  4. dup два FD, поэтому в конечном итоге они имеют наименьшие доступные номера, теперь 3 и 4
  5. execve программа, которую я хочу создать

Все это кажется твердо стоящим на территории пешего боя, так что я очень надеюсь, что пропустил лучший способ сделать это.

Есть ли способ сделать это в Rust? В противном случае, какие-либо предложения по моему подходу?

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