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