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)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
sudo apt-get remove filezilla
et bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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