--- rpl/src/instructions_s1.c 2019/07/16 16:04:04 1.111 +++ rpl/src/instructions_s1.c 2019/07/19 06:53:29 1.112 @@ -3459,7 +3459,6 @@ instruction_syseval(struct_processus *s_ int pipes_entree[2]; int pipes_erreur[2]; int pipes_sortie[2]; - int registre_ios; int status; file *fpipe; @@ -3485,6 +3484,8 @@ instruction_syseval(struct_processus *s_ struct_objet *s_objet_resultat; struct_objet *s_objet_temporaire; + struct pollfd fds; + struct sigaction action_courante; struct sigaction action_passee; @@ -3876,7 +3877,7 @@ instruction_syseval(struct_processus *s_ if (dup2(pipes_entree[0], STDIN_FILENO) == -1) { (*s_etat_processus).erreur_systeme = d_es_processus; - printf("%d\n",__LINE__); + printf("%d\n",__LINE__); } } @@ -3885,7 +3886,7 @@ instruction_syseval(struct_processus *s_ if (dup2(pipes_sortie[1], STDOUT_FILENO) == -1) { (*s_etat_processus).erreur_systeme = d_es_processus; - printf("%d\n",__LINE__); + printf("%d\n",__LINE__); } } @@ -3894,7 +3895,7 @@ instruction_syseval(struct_processus *s_ if (dup2(pipes_sortie[1], STDERR_FILENO) == -1) { (*s_etat_processus).erreur_systeme = d_es_processus; - printf("%d\n",__LINE__); + printf("%d\n",__LINE__); } } @@ -4114,10 +4115,26 @@ instruction_syseval(struct_processus *s_ } etape = 1; - registre_ios = ios; + attente.tv_sec = 0; + attente.tv_nsec = GRANULARITE_us * 1000; + + fds.fd = pipes_sortie[0]; + fds.events = POLLIN; - while((ios = getc(fpipe)) != EOF) + while(feof(fpipe) != 0) { + if (poll(&fds, 1, 0) > 0) + { + getc(fpipe); + attente.tv_sec = 0; + attente.tv_nsec = GRANULARITE_us * 1000; + } + else + { + nanosleep(&attente, NULL); + INCR_GRANULARITE(attente.tv_nsec); + } + if (etape == 1) { gettimeofday(&horodatage_final, NULL); @@ -4137,7 +4154,6 @@ instruction_syseval(struct_processus *s_ } } - ios = registre_ios; break; } }