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