feof status (was: Re: [Python-Dev] Rehabilitating fgets)

Guido van Rossum guido@python.org
Sun, 07 Jan 2001 11:52:11 -0500


> This mess reminds me.  For some work I'm doing right now, it would be
> very useful if there were a way to query the end-of-file status of a
> file descriptor without actually doing a read.

I hope you really mean file object (== wrapper around stdio FILE
object).  A file descriptor (small little integer in Unix) doesn't
have a way to find this out.

Even for file objects, it is typically only known that there's an EOF
condition after a lowest-level read operation returned 0 bytes.  So in
effect you must still do a read in order to determine EOF status.

I just ran a small test program, and fread() appears to set the eof
status when it returns a short count.  Normally, Python's read() uses
fread() so this might be useful.  However after a readline(), you
can't know the eof status (unless the last line of the file doesn't
end in a newline).

> I don't see this ability anywhere in the 2.0 API.  Questions:
> 
> 1. Am I missing something obvious?
> 
> 2. If the answer to 1 is that I am not, in fact, being a dumbass, what
>    is the right way to support this?  The obvious alternatives are an 
>    eof member (analogous to the existing `closed' member, or an eof()
>    method.  I favor the latter.
> 
> 3. If we agree on a design, I'm willing to implement this at least for
>    Unix.  Should be a small project.

Before adding an eof() method, can you explain what your program is
trying to do?  Is it reading from a pipe or socket?  Then select() or
poll() might be useful.

--Guido van Rossum (home page: http://www.python.org/~guido/)