bonjour,
je cherche à lancer un exécutable et à lui envoyer un flux et recevoir sa sortie
j'ai trouvé un code permettant de rediriger les flux.. tout marche bien sauf dans certains cas où l'utilisateur est solicité pour répondre à une question cependant celle-ci ne semble pas être suivi d'un retour à la ligne.. et donc read ne la détecte jamais (ou après la réponse de l'utilisateur ce qui est embetant)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| int main(int argc, char **argv)
{
int tube_1[2];
int tube_2[2];
if ((pipe(tube_1) != 0) || (pipe(tube_2) != 0))
return 0;
switch (fork()) {
case -1 :
close(tube_1[0]); close(tube_1[1]);
close(tube_2[0]); close(tube_2[1]);
return 0;
case 0 :
close(tube_1[1]);
close(tube_2[0]);
dup2(tube_1[0], STDIN_FILENO);
close(tube_1[0]);
dup2(tube_2[1], STDOUT_FILENO);
close(tube_2[1]);
execv ("echo2.sh", NULL);
exit(EXIT_SUCCESS);
default :
close(tube_1[0]);
close(tube_2[1]);
}
//lecture du flux provenant de l'éxecutable
char nom[256]="";
while( read(tube_2[0],nom,1)==1){
cout << nom ;
}
} |
le code est simplifié pour ne montrer que la redirection de flux et la partie lecture.
par exemple si l'exécutable effecture la commande suivante :
sudo apt-get remove filezilla
et bien
Souhaitez-vous continuer [O/n]?
n'apparait qu'après la réponse de l'utilisateur....
Donc je cherche le moyen de récupérer le contenu du flux avant le retour à la ligne...
je précise que je n'ai jamais touché ni au C ni au C++ mais j'ai juste besoin de cette fonction.. alors je suppose que le code est loin d'être parfait
merci d'avance pour vos réponses
Partager