On 30 Jan 2008, at 07:26, Chris Espinosa wrote:
If you're using NSFileHandle readDataOfLength:, you're at EOF if
the size of the data is 0 or less than the length desired.
If you're using read(), you're at EOF when read returns 0.
If you're using fread, you're at EOF when fread returns a size_
that's 0 or smaller than nitems, or feof() returns true.
That's not quite the whole story.
If you're using fread(), you're at EOF when fread() returns 0, *and*
feof() returns true. It can return 0 with feof() false, for
instance if there is a read error in the middle of a file, in which
case ferror() will be true instead; in that case, you haven't
finished reading the file. I suspect a lot of programs (probably
including a number of mine) think that they've finished reading in
that case, though they certainly shouldn't.
Additionally, both fread() and NSFileHandle can return less than the
amount requested if the underlying fd is a communications channel
rather than a file, even if there will be more data to follow. The
likelihood of that situation may vary from application to
application, but it might be better to explicitly check for *zero*
bytes returned, rather than less-than-expected, since the extra read
is (AFAIK) harmless.
Kind regards,
Alastair.
--
http://alastairs-place.net