Bonsoir,

allons directement au but, voici deux bouts de codes


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
 
int main(int argc, char *argv[]) {
    int fds[2];
    int val;
    int res;
 
    assert(pipe(fds) != -1);
 
    switch (fork()) {
    case -1:
        exit(EXIT_FAILURE);
 
    case 0:
        printf("FILS\n");
        sleep(2);
        val = 123;
 
        /* on fait crasher */
        assert(0);
 
        assert(write(fds[1], &val, sizeof(unsigned int)) == sizeof(unsigned int));
        printf("val=%d\n", val);
        exit(EXIT_SUCCESS);
 
    default:
        printf("Attend que le fils envoie une information\n");
        res = read(fds[0], &val, sizeof(unsigned int));
        printf("read = %d, val = %d\n", res, val);
    }
 
    return 0;
}
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
34
35
36
 
int main(int argc, char *argv[]) {
    int fds[2];
    int val;
    int res;
 
    assert(pipe(fds) != -1);
 
    switch (fork()) {
    case -1:
        exit(EXIT_FAILURE);
 
    case 0:
        close(fds[0]);
 
        printf("FILS\n");
        sleep(2);
        val = 123;
 
        /* on fait crasher */
        assert(0);
 
        assert(write(fds[1], &val, sizeof(unsigned int)) == sizeof(unsigned int));
        printf("val=%d\n", val);
        exit(EXIT_SUCCESS);
 
    default:
        close(fds[1]);
 
        printf("Attend que le fils envoie une information\n");
        res = read(fds[0], &val, sizeof(unsigned int));
        printf("read = %d, val = %d\n", res, val);
    }
 
    return 0;
}

Je n'arrive pas à comprendre pourquoi dans la première V, le programme est bloqué, alors que dans la seconde non, que ce cache derrière la fermeture des extrémités non utilisées du pipe ???


merci d'avance !