c - FIFO blokkeres ikke ved læsning

Indlæg af Hanne Mølgaard Plasc

Problem



Hvorfor blokerer det følgende program ikke på det andet read opkald?


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, "teststring", 10);

    close(fifo);
}

return 0;


Det andet read opkald fortsætter med at returnere 0, selv om fifo bliver tomt og det skal blokere på read opkaldet.


Mangler jeg noget?


OS er Windows, og røret er oprettet med en mknod testfifo p.

Bedste reference


Jeg fandt ud af et andet stackoverflow-spørgsmål, at jeg skulle åbne og lukke 'server' -røret, i dette tilfælde røret i overordnet proces hver gang; så her er den korrekte kode:


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, "teststring", 15);
    close(fifo);
}

Andre referencer 1


Du lukkede ikke filen


EDIT: slettet noget pinligt.