OVH Cloud OVH Cloud

Peut utiliser un file descriptor dans un processus étranger ?

3 réponses
Avatar
Eric Bart
Bonjour,

J'ai un "named pipe" qui fonctionne bien dans un sens
et je voudrais m'en servir pour envoyer le nom du pipe
de retour.

Tant qu'à faire j'aimerais utiliser un "unnamed pipe"
pour le retour. Je précise que les deux processus n'ont
aucun lien de parenté.

Est-il possible d'envoyer à l'autre processus une référence
à un "unnamed pipe" ?

Je me doute que le file descriptor que je pourrais envoyer
n'aurait pas de sens dans le contexte de l'autre processus.
Mais ptêt y a t-il un dup2() ou autre pour arranger l'affaire ..

Merci

3 réponses

Avatar
Laurent Wacrenier
Eric Bart écrit:
Bonjour,

J'ai un "named pipe" qui fonctionne bien dans un sens
et je voudrais m'en servir pour envoyer le nom du pipe
de retour.

Tant qu'à faire j'aimerais utiliser un "unnamed pipe"
pour le retour. Je précise que les deux processus n'ont
aucun lien de parenté.

Est-il possible d'envoyer à l'autre processus une référence
à un "unnamed pipe" ?


En envoyant le descripteur par un paquet de service de type SCM_RIGHTS
d'une socket unix.

Ceci dit, il vaut mieux utiliser des sockets unix directement, elles
sont garanties être bidirectionnelles, à la différence des pipe.

Avatar
Eric Bart
J'ai un "named pipe" qui fonctionne bien dans un sens
et je voudrais m'en servir pour envoyer le nom du pipe
de retour.

Tant qu'à faire j'aimerais utiliser un "unnamed pipe"
pour le retour. Je précise que les deux processus n'ont
aucun lien de parenté.

Est-il possible d'envoyer à l'autre processus une référence
à un "unnamed pipe" ?


En envoyant le descripteur par un paquet de service de type SCM_RIGHTS
d'une socket unix.


Est-ce en passant par un paquet de service que le descripteur va être
translaté dans l'espace mémoire de l'autre processus ?

Il existe d'autres moyens d'envoyer le descripteur, mais j'imagine que
dans ces cas le descripteur reçu n'est pas translatable dans l'espace
des variables du noyau. non ?


Avatar
Laurent Wacrenier
Eric Bart écrit:
Est-ce en passant par un paquet de service que le descripteur va être
translaté dans l'espace mémoire de l'autre processus ?


Je suppose que oui, sinon ça n'aurait aucun interêt, mais je n'ai
jamais essayé.

Il existe d'autres moyens d'envoyer le descripteur, mais j'imagine que
dans ces cas le descripteur reçu n'est pas translatable dans l'espace
des variables du noyau. non ?


On peut passer le numéro du descripteur d'un processus à l'autre de
diverses manières, mais ça ne l'ouvre pas pour autant.