select() a pojmenovane fifo
Pavel Kankovsky
peak na argo.troja.mff.cuni.cz
Středa Červenec 5 12:15:12 CEST 2006
On Wed, 5 Jul 2006, Michal Kubecek wrote:
> On Mon, Jul 03, 2006 at 11:11:13AM +0200, Jiri Kosina wrote:
> > * If no process has the pipe open for writing, read()
> > shall return 0 to indicate end-of-file.
> Takhle se ale Linux podle mých zkušeností nechová. Pokud rouru nemá
> nikdo otevřenou pro zápis, read() blokuje.
Ony jsou to ve skutečnosti dvě různé situace:
1. po neblokujícím open() s O_RDONLY, dokud ještě nebyla nikým
otevřena pro zápis,
2. poté, co byl uzavřen poslední zapisovací deskriptor.
V první případě se to blokuje a čeká na zapisovatele (nebo tedy
v neblokujícícm módu vrací EWOULDBLOCK). V druhém případě okamžitě
vrací EOF. O tuto dvojakost si nabil ústa původní tazatel: nejdřív to
jakoby fungovalo dobře, a pak se to najednou dostalo "do vývrtky".
Je pravda, že standard to popisuje tak, jako by existoval jen druhý
případ, což je asi nějaké opominutí (možná v tom hraje roli to, že první
lze pozorovat jen po neblokujícím open()).
--Pavel Kankovsky aka Peak [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."
Další informace o konferenci Linux