Znovu FIFO a blokovani v open()
Mikulas Patocka
mikulas na artax.karlin.mff.cuni.cz
Úterý Říjen 19 21:46:25 CEST 1999
>To jsem pouzival v CGIckach, ktere pres FIFO komunikovaly s demonem. Ted
>to CGI prepisuju jako modul do Apache a tim padem je pouziti signalu pase.
>
>Samozrejme, ze se nabizi moznost udelat to nejak takhle:
>
>while (i++ < 50)
>{
> if (open(fifo, O_WRONLY|O_NONBLOCK) == -1)
> if (errno == ENXIO)
> usleep(100);
> else
> failed
> else
> v poradku
>}
>
>Mam ale strach, ze jednak se nejake konexe netrefi do stavu, kdy demon
>zrovna otevira FIFO pro cteni i pres vysokou cetnost pokusu o otevreni pro
>zapis a jednak mi vadi, ze i vsechny operace budou non-blocking, coz
>komplikuje praci.
>
>Zkratka sikla by se nejaka casovana asynchronni udalost, jina nez signal.
A co takhle to udelat takhle: konzument fifo otevre jednou pro cteni a
jednou pro zapis. S tim handlem pro zapis nebude nic delat, ale
zabrani to zavreni fifa, pokud je vsichni producenti zavrou. Konzument
nebude zavirat fifo, bude je drzet otevrene porad. Producenti ho
otevrou s O_NONBLOCK a pokud se to nepovede, je jasne, ze konzument je
mrtvy.
Mikulas Patocka
Další informace o konferenci Linux