Hello! From fopen(3): "Therefore it is good practice (and indeed sometimes necessary under Linux) to put an fseek(3) or fgetpos(3) operation between write and read operations on such a stream." I am not sure about the origin of this good practice but fgetpos(3) seems wrong. It has to be fsetpos(3) if I'm reading the C standard and POSIX[0] correctly. BTW, calling fsetpos(3) will require a call to fgetpos(3) first. So why is it being advised as a good practice to call two functions (`fgetpos` and then `fsetpos`)? Maybe just i) mention fseek(3) only OR ii) mention fseek(3) and fflush(3) (instead of fsetpos(3))? [0] https://pubs.opengroup.org/onlinepubs/9699919799.2018edition/functions/fopen.html Thanks! Regards, Avinash Sonawane (rootKea) https://www.rootkea.me
I think we should only mention using `fseek` as a good practice between read and write operations since: a. fflush can't be used on input stream i.e. if last operation was read while fseek() can be used between read-write or write-read. b. fsetpos needs fgetpos to be called first. So let's drop `fgetpos+fsetpos` from the good practice suggestion So I suggest this small change: diff --git a/man3/fopen.3 b/man3/fopen.3 index a1d781706..fb289a537 100644 --- a/man3/fopen.3 +++ b/man3/fopen.3 @@ -138,8 +138,6 @@ result of writes other than the most recent.) Therefore it is good practice (and indeed sometimes necessary under Linux) to put an .BR fseek (3) -or -.BR fgetpos (3) operation between write and read operations on such a stream. This operation may be an apparent no-op (as in \fIfseek(..., 0L, SEEK_CUR)\fP Thanks!
Hi Avinash, I decided to keep fsetpos(3) to not lose the info, so I applied the following patch: fopen.3: tfix Reported-by: Avinash Sonawane <rootkea@gmail.com> Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com> diff --git a/man3/fopen.3 b/man3/fopen.3 index b9bbc4704..465031167 100644 --- a/man3/fopen.3 +++ b/man3/fopen.3 @@ -114,7 +114,7 @@ Therefore it is good practice (and indeed sometimes necessary under Linux) to put an .BR fseek (3) or -.BR fgetpos (3) +.BR fsetpos (3) operation between write and read operations on such a stream. This operation may be an apparent no-op (as in \fIfseek(..., 0L, SEEK_CUR)\fP