________________________________________ Von: linux-man-owner@xxxxxxxxxxxxxxx [linux-man-owner@xxxxxxxxxxxxxxx] im Auftrag von Arkadiusz Drabczyk [arkadiusz@xxxxxxxxxxxx] Gesendet: Donnerstag, 18. Juni 2020 13:43 An: Walter Harms Cc: linux-man@xxxxxxxxxxxxxxx Betreff: Re: [PATCH] fread.3: Explain that file position is moved after calling fread()/fwrite() On Thu, Jun 18, 2020 at 08:37:02AM +0000, Walter Harms wrote: >> Isn't it already covered by this fragment: >> >> "If an error occurs, or the end of the file is reached, the return >> value is a short item count (or zero)." >> >> IMHO no, >> what does a "short item count" mean ? >"items of data" refers to nmemb: >"The function fread() reads nmemb items of data" >so "item count" means number of size-long sequences of bytes and >"short" means fewer than requested. But I think you know that well and >you just think that "short item count" is not clear enough, right? >(And of course I hope that I get it right.) When reading that i try to "ignore" what i know and get the position of an first time reader, so i noticed that this was fishy (i guess short item count is derived from short read) >> E.g. my size is 4 bytes and there are 3 bytes left to read. what is >> the return value? >If the requested size is 4 but there are only 3 bytes left then >fread() will return 0, no matter what's the value of nmemb because >it's not able to read even a single item and feof() will return >non-zero. I think that this is explained clearly enough in the >manpage. IMHO i would be more clear to drop that "short item count". "If an error occurs, or the end of the file is reached, the return value is zero" >> and will the last few bytes ever read ? >That is interesting. POSIX >https://pubs.opengroup.org/onlinepubs/9699919799.2008edition/ says >that "If a partial element is read, its value is unspecified.". But as >fread() returns number of items it has successfully read the returned >value should always be checked and it's different than requested nmemb >it means an error and I guess there is no way to tell how many bytes >have been partially read - for example if size == 4 and nmemb == 1 and >returned value is 0 you don't know if fread() read 1, 2 or 3 bytes. the GNU version fills the buffer with the remaining bytes but returns 0. >Anyway, the patch that I sent explains that file pointer is moved >after fread()/fwrite(). The discussion about return value should be >started in a separate thread. i have changed the subject. -- Arkadiusz Drabczyk <arkadiusz@xxxxxxxxxxxx>