pipe, bloquant ? non bloquant ?
Bonsoir,
allons directement au but, voici deux bouts de codes
Code:
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:
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 !