On Dec 6, 2007 9:14 PM, Saurabh Sehgal <saurabh.r.s@xxxxxxxxx> wrote: > Hi, > > I had a basic question about read . I have a file descriptor marked > with non blocking I/O , and I want to read data from the file > descriptor. This file descriptor is the read end of a UNIX pipe. > > The process that the pipe reads from is a very slow process. Hence I > need to poll and keep on trying to read from the fd until the process > has actually written something to the pipe. I execute read while the > errno condition EAGAIN is true. Will this ever result in an infinite > loop ? (lets say the remote process dies and doesnt write anything to > the pipe, will I go into an infinite loop since I am polling while > EAGAIN is true ?). Hi, I'd suggest taking a look at select(2) which allows for the specification of a timeout. Use pselect(2) if you are waiting for a signal as well as data from a file descriptor or otherwise the select(2) call may block indefinitely due to a nasty race condition that may occur. To your question: There are actually a couple of reasons why your process would or would not run indefinitely in that loop. There are also a couple of other errors read(3) can return that might cause your condition to return false, thus breaking the loop (if I understood correctly, code example is welcome). What about EINTR which is returned when the call was interrupted by a signal before any data was read? (Please note that for a FIFO or pipe it will never return EINTR if any data has been read.) \Steve -- Steve Grägert DigitalEther.de - To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html