Bonsoir,

J'ai un léger soucis avec un programme, en fait je ne comprends pas pourquoi il fonctionne si il y a fflush et bloque sinon:

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
31
32
33
int main(){                                                                                            
        int tube[2];                                                                                   
        fd_set ensemble;                                                                               
        int     i = 0;                                                                                     
        char    c = 'c';                                                                               
 
        pipe(tube);                                                                                    
 
        switch(fork()){                                                                                
                case -1:                                                                               
                        perror("fork");                                                                
                        exit(1);                                                                       
                case 0: //Processus fils                                                               
                        while(1){                                                                      
                                write(tube[1], &c, 1);                                                 
                                sleep(1);                                                              
                        }                                                                              
                        break;                                                                         
                default:                                                                               
                        while(1){                                                                      
                                FD_ZERO(&ensemble);                                                    
                                FD_SET(tube[0], &ensemble);                                            
 
                                select(FD_SETSIZE, & ensemble, NULL, NULL, NULL);                      
 
                                printf("%d ", ++i);                                                    
                                fflush(stdout);     //Si on retire cette instruction, le programme bloque                                                 
                                read(tube[0], &c, 1);                                                  
                        }                                                                              
        }                                                                                              
 
        return 0;                                                                                      
}
Je comprends pas en quoi le fait qu'on ne vide pas le buffer de stdout rende l'instruction read bloquante alors que tube[0] contient des données..