AF_UNIX SOCKET: Могу ли я пройти грандиозную рукоятку между процессами?

StackOverflow https://stackoverflow.com/questions/1683246

  •  18-09-2019
  •  | 
  •  

Вопрос

Допустим, я создаю socketpair() и я передаю справиться одного из розетков к порожденному процессу (popen), сможет ли указанный процесс общаться с родителем?

Примеры, которые я видел, применяются с помощью fork() который не имеет возможности для моего текущего проекта.

Обновлено: Я попробовал простой тест:

  1. Клиент: socketpair с гнездами [0

  2. Из использования клиента posix_spawn с гнездами1 как аргумент командной строки

  3. Клиент: write в розетку ... клиент выходит без какого -либо предупреждения ...

Похоже, есть проблема с этим методом.

Обновлено: Я также нашел это примечание:

Pipes and socketpairs are limited to communication between processes with a common ancestor.

Это было полезно?

Решение

Страница человека для CERCVE CASTIONS:

 File descriptors open in the calling process image remain open in the new
 process image, except for those for which the close-on-exec flag is set
 (see close(2) and fcntl(2)).  Descriptors that remain open are unaffected
 by execve().

Поскольку такие функции, как Popen, основаны на Execve, то дескрипторы файлов, которые вы получили от своей функции сокета, должны быть хорошими в обоих процессах, и я не понимаю, почему вы не можете передать дескриптор любым способом, который вам нравится. Я предполагаю, что в этом случае вы хотите преобразовать ее в строку и установить его на STDIN в подпроцесс, который преобразовал бы его обратно в INT, чтобы использовать в качестве дескриптора файла.

Это, безусловно, стоит написать какой -то пробный код.

Другие советы

Да, вы можете передать его дочернему процессу. Хитрость на самом деле в том, что SocketPair () дает вам пару подключенных гнезда - убедитесь, что ребенок держит один, а родитель сохраняет другого (родитель должен закрыть ребенка и наоборот).

Вместо этого в большинстве случаев используется пара труб.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top