La FIFO ne bloque pas en lecture

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.