Re: EAGAIN with read

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Assembler]     [Git]     [Kernel List]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [C Programming]     [Yosemite Campsites]     [Yosemite News]     [GCC Help]

  Powered by Linux