pojmenovan roura
Alexandr Malusek
malusek na hroch.ujf.cas.cz
Pondělí Prosinec 8 20:29:36 CET 1997
Ondrej Kamenik <kamenik na math.muni.cz> writes:
> 1) zapisovatel vytvori pojmenovanou rouru
> 2) ctenar ji otevre ke cteni bez blokovani, tedy:
> fifo=open(cesta,O_RDONLY|O_NONBLOCK);
> 3) zacne cist volanim:
> char c;
> read(fifo,&c,1);
> tady bych ocekaval, ze read vrati -1 a v errno bude EWOULDBLOCK (nebo
> EAGAIN). Ale vono nic, volani read nezkolabuje a v c se mi objevovala 0.
V knize "Principy operacniho systemu Unix" od M. J. Bacha je uvedeno:
<CITACE>
Jestlize vsak proces otevre pojmenovanou rouru s volbou bez zpozdeni
(moje pozn.: tim se zrejme mysli volba O_NONBLOCK), pak dojde k
navratu z volani read okamzite, a to i v pripade, ze roura neobsahuje
zadna data. Semantika cteni a zapisu roury se podoba semantice cteni a
zapisu terminalovych zarizeni, coz dovoluje programum ignorovat typ
souboru, se kterym pracuji.
</CITACE>
Semantiku cteni terminalovych zarizeni jsem nestudoval, nicmene read()
ve Vasem pripade vraci hodnotu 0 a stejnou hodnotu vraci i pri cteni z
prazdneho souboru. Varianty, ktere jsem vyzkousel, fungovaly stejne
pod Linuxem 2.0.30 (libc.so.5.3.12) i pod Solarisem 2.5.1.
Takze to vypada, ze je to vlastnost, nikoliv chyba.
--
A. Malusek (malusek na ujf.cas.cz)
UJF AV CR
Další informace o konferenci Linux