J'ai un code C qui fait
system("ssh machine programme &");
Mais le processus ssh hérite des filedescripteurs de l'appli.
j'aimerai qu'il n'hérite de rien.
j'ai trouvé peut-être une solution:
a base de: (pseudo code)
if (fork()==0) {
for (fd=0;fd<maxfd;fd++) {
close(fd);
}
system("ssh......");
}
je ne suis pas fier de mon truc.
avez-vous une meilleure idée ?
merci...
# Non.
Posté par Obsidian . Évalué à 2.
# non c'est bon.
Posté par Nicolas Boulay (site web personnel) . Évalué à 3.
C'est en utilisant un truc semblable que fonctionne les pipes et les redirections de fichiers.
"La première sécurité est la liberté"
[^] # Re: non c'est bon.
Posté par EraZerg . Évalué à 1.
malheureusement mon idée ne semble pas marcher:
mon appli initiale faisait:
1) ouvre_sockets();
2) system("ssh machine programme&");
3) travaille_sur_les_sockets();
maintenant, avec mon bidule en plus:
1) ouvre_sockets();
2) if (fork()==0) {
for (fd=0;fd<maxfd;fd++) close(fd);
system("ssh......&");
exit(0);
}
3) travaille_sur_les_sockets();
et le gros problème c'est que maintenant travaille_sur_les_sockets() (dans le corps du pere) cartonne en me disant que mes sockets sont perdues.
Avez-vous mieux à proposer ?
Merci d'avance.
[^] # Re: non c'est bon.
Posté par guillaume Dorchies . Évalué à 1.
Il faut donc que dans ton for tu mettes une condition pour ne pas fermer tes sockets.
ou utiliser ouvre_sockets() apres la fermeture, si tu peux.
[^] # Re: non c'est bon.
Posté par EraZerg . Évalué à 1.
En fait la bonne solution c'est mettre le flag close-on-exec sur les filedescripteurs. avec fnctl.... ça marche maintenant.
merci!
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.