fopen with "a+" does not respect setting file read position to start of file
Matthias Andree
matthias.andree@gmx.de
Thu Apr 1 12:53:00 GMT 2010
Bengt-Arne Fjellner wrote on 2010-04-01:
> On 2010-04-01 11:06 AM, Brebner, Gavin wrote:
>> We hit a problem in a code, and narrowed it down to a test case that
>> does :
>>
>> while (cnt) {
>> f=fopen(host_file, "a+");
>> if (!f)
>> perror("dup_host_file: Could not open hostfile");
>> /* rewind(f); */
>> while (cnt) {
>> int ret=fscanf(f, "%s", line);
>> if (ret != EOF) {
>> fprintf(f, "%s\n", line);
>> cnt--;
>> dup++;
>> }
>> }
>> fclose(f);
>>
>> In earlier versions of cygwin we have, this works fine, however in the
>> recently installed
>> versions, it no longer works. It seems that fopen(host_file, "a+") is
>> NOT positioning the
>> read position at the start of the file as it should. Adding an explicit
>> rewind(f) is a
>> work around.
> Well if that worked previously it was a bug.
Not a Cygwin defect, but an application bug, and what Gavin named "work
around" is actually the right fix.
POSIX explicitly states that the initial position beginning/end of file in
append mode is implementation-defined, and the Cygwin documentation
doesn't make promises either way. Linux and FreeBSD document BOF and EOF,
respectively.
> From the manual for fopen:
> ``a+'' Open for reading and writing. The file is created if it
> does not exist. The stream is positioned at the
> end of the file. Subsequent writes to the file will
> always end up at the then current end of file, irre-
> spective of any intervening fseek(3) or similar.
Irrelevant, as that is neither from POSIX nor from cygwin-doc-1.5-1.
--
Matthias Andree
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
More information about the Cygwin
mailing list