Hi, I think I am experiencing a problem with fifos on cygwin. The attached C source (fifocomm.c) creates two pipes (/tmp/pipe.{in,out}), expecting to receive inputs from /tmp/pipe.in and replying to /tmp/pipe.out. Compiling this source on linux and launching it produces on the terminal 1) Opening pipes and then the program waits for someone to write to /tmp/pipe.in. Opening another terminal and launching the fifotest.sh script (also attached) produces on the first terminal 1) Closing pipes 2) Opening pipes and the program continues waiting for another input, while the other terminal shows "You sent: foo" Instead, on cygwin, after launching the program one gets: 1) Opening pipes 1) Closing pipes 2) Opening pipes 2) Closing pipes 3) Opening pipes 3) Closing pipes 4) Opening pipes .... .... meaning that the pipes are continually closed and reopened even if nobody is writing to /tmp/pipe.in. Seemingly, the problem is the return value of read() on line 55. As O_NONBLOCK is set, until no data is available for reading, read() shouldn't block but should return -1 and set errno to EAGAIN. After a client that opened the pipe for writing, closes it (and no other client is using the pipe), read() should return 0 and only at this point the pipes have to be closed and reopened. However, on cygwin, read() returns 0 also when nobody is writing to the input pipe causing the above ping pong. As already said, it works as it should on linux. -- Enrico