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