Problem s FIFO (mirne OT)

Mikulas Patocka mikulas na artax.karlin.mff.cuni.cz
Středa Červen 9 14:04:32 CEST 1999


> > >mam demona, se kterym komunikuji CGI scripty pres FIFO. Jak znamo, operace s
> > >FIFO jsou blocking a to tak, ze se blokuje i open(), dokud nekdo neotevre
> > >"druhou stranu".
> > 
> > Divim se, jak to vubec muze fungovat. Pokud data nezapises na jeden write(),
> > tak v tom je race-condition (vic skriptu soucasne zapisuje a data se pomichaji).
> 
> Ja data zapisu na jeden write, ale paklize jsou oba konce fifo obsazene 
> (demon<---->cgi1), tak se cgi2 blokne v open(), dokud demon svuj konec 
> neuzavre a znovu neotevre. Pseudokod demona:
> 
> nekonecny cyklus A
> {
>   otevri fifo pro cteni
>   nekonecny cyklus B
>   {
>     cti z fifo
>     pokud jsi dostal konec souboru (read() == 0), pak prerus cyklus B
>     pokud jsi dostal data, pak je zpracuj
>   }
>   zavri fifo
> }
> 
> Abych se nechlubil cizim perim, tenhle kod mam od Pavla Kankovskeho
> (tentokrat to nepopre, nasel jsem si to v archivu :) a funguje naprosto
> spolehlive.

Uff, to mi nejak neni jasne (neni v tom nejaky zaludny option?). Normalne
kdyz se fifo otevre jednou pro cteni, tak se pak muze otevrit
libovolnekrat pro zapis. Test: mknod fifo p
Na prvni konzoli: cat <fifo
Na druhe: cat >fifo
Na treti: cat >fifo
Nyni vse, co pisu na druhe i treti konzoli se objevuje na prvni.

Daemon by mohl mit fifo otevrene porad.

Mikulas Patocka



Další informace o konferenci Linux