fopen with "a+" does not respect setting file read position to start of file
Bengt-Arne Fjellner
Bengt-Arne.Fjellner@ltu.se
Thu Apr 1 11:27:00 GMT 2010
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.
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.
--
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