select() a pojmenovane fifo

Michal Schmidt xschmi00 na stud.feec.vutbr.cz
Úterý Červenec 4 23:56:27 CEST 2006


Petr Janda wrote:
> 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.
>> 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

EOF je "end of file", ten prectenim nezmizi. Tak ten deskriptor 
close()nete a znovu otevrete.

>>>  - 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).

To neni ani tak chovani selectu jako spis rour samotnych. Roura ma svuj 
zivotni cyklus. Pri otevreni pro cteni blokuje, dokud nekdo nezacne 
zapisovat. Pak probiha komunikace. Jakmile zapisovatel svuj konec zavre, 
ctenar dostane EOF a jedina rozumna vec, kterou s ni muze udelat, je 
zavrit ji.

> Muzu pouzit neblokujici cteni rovnou, vytocit CPU na 100% a divit se.

To snad nakonec nebude potreba :-)

Michal


Další informace o konferenci Linux