Pourquoi le programme suivant ne bloque pas lors du deuxième appel en read
?
int pid = fork(); if(pid) { int fifo = open("testfifo", O_RDWR); char buf[20]; while(1) { read(fifo, buf, 10); puts(buf); } } else { int fifo = open("testfifo", O_WRONLY); write(fifo, "testssortingng", 10); close(fifo); } return 0;
Le deuxième appel en read
continue de renvoyer 0
même si le fifo devient vide et il devrait se bloquer lors de l’appel en read
.
Est-ce que je manque quelque chose?
Le système d’exploitation est Windows et le tuyau a été créé avec un mknod testfifo p
.
J’ai trouvé, à partir d’une autre question de stackoverflow, que je devais ouvrir et fermer le canal “serveur”, dans ce cas le canal du processus parent, à chaque fois; alors voici le code correct:
int pid = fork(); if(pid) { char buf[20]; while(1) { int fifo = open("testfifo", O_RDWR); read(fifo, buf, 15); close(fifo); puts(buf), fflush(stdout); } } else { int fifo = open("testfifo", O_WRONLY); write(fifo, "testssortingng", 15); close(fifo); }
Vous n’avez pas fermé le fichier
EDIT: supprimé quelque chose d’embarrassant.