Skip to contentSkip to conversation

New: fopen(3): Incorrect good practice suggestion

Bug 215848 [email protected] 1 participant 3 messages Apr 17, 2022 – May 14, 2022 Man-pages: manual pages for Linux -- Sections 2, 3, 4, 5, and 7

lore
Share & tools
lore
#0 lore raw

https://bugzilla.kernel.org/show_bug.cgi?id=215848

Bug ID: 215848
Summary: fopen(3): Incorrect good practice suggestion
Product: Documentation
Version: unspecified
Hardware: All
OS: Linux
Status: NEW
Severity: normal
Priority: P1
Component: man-pages
Assignee: [email protected]
Reporter: [email protected]
Regression: No

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

Signature · 4 lines
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.
#1 lore raw

[Bug 215848] fopen(3): Incorrect good practice suggestion

https://bugzilla.kernel.org/show_bug.cgi?id=215848

--- Comment #1 from Avinash Sonawane ([email protected]) ---
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:

man3/fopen.3 +0 -2
index a1d781706..fb289a537 100644
@@ -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!

Signature · 4 lines
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.
#2 lore raw

[Bug 215848] fopen(3): Incorrect good practice suggestion

In reply to [email protected]

https://bugzilla.kernel.org/show_bug.cgi?id=215848

Alejandro Colomar (man-pages) ([email protected]) changed:

What |Removed |Added
----------------------------------------------------------------------------

             Status|NEW                         |RESOLVED
                 CC|                            |[email protected]
         Resolution|---                         |CODE_FIX

--- Comment #2 from Alejandro Colomar (man-pages) ([email protected]) --- Hi Avinash,

I decided to keep fsetpos(3) to not lose the info, so I applied the following patch:

fopen.3: tfix

man3/fopen.3 +0 -0
index b9bbc4704..465031167 100644
@@ -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

Signature · 4 lines
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.