[prev in list] [next in list] [prev in thread] [next in thread]
List: php-doc-bugs
Subject: [DOC-BUGS] Doc #76995 [Com]: fseek() breaks reading in read/append (a+) mode
From: "riz dot ali0001 at gmail dot com" <php-bugs () lists ! php ! net>
Date: 2024-01-10 13:52:36
Message-ID: E1rNZ0W-0088Op-2I () bugs ! php ! net
[Download RAW message or body]
Edit report at https://bugs.php.net/bug.php?id=76995&edit=1
ID: 76995
Comment by: riz dot ali0001 at gmail dot com
Reported by: miloslav dot hula at gmail dot com
Summary: fseek() breaks reading in read/append (a+) mode
Status: Open
Type: Documentation Problem
Package: Streams related
PHP Version: 7.3.0RC2
Block user comment: N
Private report: N
New Comment:
The issue highlighted in the test script relates to the use of fseek() in 'a+' mode, \
which appears to disrupt content reading. This seems to stem from conflicting \
information in the documentation. While the fopen() documentation indicates that \
fseek() can be used in 'a+' mode to adjust the reading position (with writes always \
being appended), the fseek() documentation contradicts this by stating that using \
fseek() in append mode ('a' or 'a+') can lead to undefined behavior. This discrepancy \
suggests a need for clarification in the documentation to ensure proper usage and \
avoid potential issues in file handling
Previous Comments:
------------------------------------------------------------------------
[2023-12-10 04:21:24] sincerelyjulie0 at gmail dot com
position the file pointer for reading.
------------------------------------------------------------------------
[2023-05-13 12:02:14] cynthiamarshal0010 at gmail dot com
To address the doc bug where fseek() breaks reading in read/append (a+) mode, it's \
important to understand the behavior of fseek() in that mode and how to correctly \
position the file pointer for reading. Here's an explanation and solution to update \
the documentation:
Explanation:
In the a+ mode, when you use fseek() with a positive offset, it is expected to move \
the file pointer to that offset from the beginning of the file. However, in certain \
implementations, fseek() may not work as expected in a+ mode and instead positions \
the file pointer relative to the current end of the file. This behavior can lead to \
unexpected results when trying to read from the file.
Solution:
To correctly position the file pointer for reading in a+ mode, you should use fseek() \
with a negative offset relative to the end of the file. Here's an example of how to \
update the documentation to reflect this:
vbnet
When using `fseek()` in read/append (`a+`) mode, it's important to note that its \
behavior may vary depending on the implementation. In some cases, `fseek()` may not \
correctly position the file pointer for reading. To ensure proper positioning, follow \
the recommended approach below:
To move the file pointer to a specific position from the end of the file, use a \
negative offset with `fseek()`. For example, to move the file pointer to the last 100 \
bytes of the file:
fseek(file, -100, SEEK_END);
This ensures that the file pointer is correctly positioned for subsequent read \
operations.
Please note that this workaround may not be necessary in all implementations of the C \
standard library. It's recommended to test and verify the behavior of `fseek()` in \
your specific environment to ensure compatibility and consistent results.
By providing this updated information, users will be informed about the potential \
issue with fseek() in a+ mode and the recommended approach to correctly position the \
file pointer for reading. (https://dgmeportal.live/)github.com
------------------------------------------------------------------------
[2018-10-10 16:08:23] requinix@php.net
And seconds after I hit Submit, I realize that documenting append mode's fseek quirks \
would be a good idea.
------------------------------------------------------------------------
[2018-10-10 16:07:12] requinix@php.net
Unfortunately this really is one of those "undefined behavior" situations, and PHP \
isn't the one responsible for it.
Look at the fopen(3) docs on Linux: https://linux.die.net/man/3/fopen
> Reads and writes may be intermixed on read/write streams in any order. Note
> that ANSI C requires that a file positioning function intervene between output
> and input, unless an input operation encounters end-of-file. (If this condition
> is not met, then a read is allowed to return the result of writes other than
> the most recent.) 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. This operation may be an apparent no-op (as in
> fseek(..., 0L, SEEK_CUR) called for its synchronizing side effect.
------------------------------------------------------------------------
[2018-10-10 15:11:26] miloslav dot hula at gmail dot com
Or: "In this mode, fseek() only affects the reading position". Sound like positive \
claim.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=76995
--
Edit this bug report at https://bugs.php.net/bug.php?id=76995&edit=1
--
PHP Documentation Bugs Mailing List (https://www.php.net/)
To unsubscribe, visit: https://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic