select() a pojmenovane fifo

Petr Janda janda na netbox.cz
Úterý Červenec 4 13:09:53 CEST 2006


On Sun, Jul 02, 2006 at 10:01:28PM +0200, Michal Schmidt wrote:
> Petr Janda wrote:
> >mam problem s chovanim select() pro sledovani pojmenovane fifo.
> >
> >program velmi zjednodusene vypada takto:
> >[...]
> >Moje potiz spociva v tom, ze 
> >- dokud do fifo nic nepise, tak select() spravne ceka timeout a pak 
> >  vrati 0 ...
> >
> >- pokud ji neco otevre pro zapis, tak take ceka a pracuje podle
> >  ocekavani (jsou data - navrat s 1, nesou data po timeout vraci 0)
> >
> >- pokud ji to neco zavre, tak 
> >  - nedostanu SIGPIPE
> 
> SIGPIPE dostane proces tehdy, kdyz se pokusi zapsat do roury, kterou 
> nikdo necte. To neni Vas pripad.

Pravda, moje chyba

> >  - select vraci okamzite 1 pri kazdem pruchodu smyckou - to me stve
> >    nejvic
> 
> Proc Vas to stve? Jeden z deskriptoru je nyni pripraven pro cteni (je na 
> nem ten EOF). To je v poradku, ne?

A kdyz ho prectu, tak pri dalsim pruchodu se to chova stejne

> >  - pripadne cteni z fifo_file precte 0 byte a skonci s EOF
> 
> Presne jak ma.
> Jake jine chovani byste vlastne chtel?

Touzim po tom, aby se to chovalo stejne, jako pred tim, nez do toho neco
zacalo psat, pripadne pri tom, kdyz to mel nekdo otevreny pro zapis.

Nechapu proc ta zmena chovani. Proste nejsou data, nevracim, ze muzu
cist. To by mel byt ucel select(), nebo pouzivam spatny nastroj
(funkci).
Muzu pouzit neblokujici cteni rovnou, vytocit CPU na 100% a divit se.
	
	S pozdravem 

				Petr Janda
--
email: janda_at_netbox_dot_cz



Další informace o konferenci Linux