Date: Tue, 10 Nov 1998 00:30:02 -0800 (PST) From: Bruce Evans <bde@zeta.org.au> To: freebsd-bugs@FreeBSD.ORG Subject: Re: bin/8518: freopen() in append mode followed by ftell() gives strange results Message-ID: <199811100830.AAA25413@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/8518; it has been noted by GNATS.
From: Bruce Evans <bde@zeta.org.au>
To: Arjan.deVet@adv.iae.nl, freebsd-gnats-submit@FreeBSD.ORG
Cc: sthaug@nethelp.no
Subject: Re: bin/8518: freopen() in append mode followed by ftell() gives strange results
Date: Tue, 10 Nov 1998 19:25:11 +1100
>During testing INN 2.2beta I discovered a possible 'bug' in the
>freopen() call when used with "a" (append mode). The first ftell()
>call always give 0 (irrespective of the current file length) and
>subsequent writes to the file ftell() does not tell the current
>write position in the file but the number of bytes written.
This seems to be only a ``bug''. POSIX.1-1990 says:
"If the stream is opened in append mode or if the O_APPEND flag is
set as a consequence of dealing with other handles on the file, the
result of ftell() on that stream is unspecified".
>>How-To-Repeat:
>#include <stdio.h>
>#include <unistd.h>
>
>main () {
> FILE *f, *g;
> long i;
>
> g = fopen("/tmp/test", "a");
> f = freopen("/tmp/test", "a", g);
> i = ftell(f);
> printf("%d\n", i);
> fprintf(f, "test");
> i = ftell(f);
> printf("%d\n", i);
> fclose(f);
>}
>
>Create empty /tmp/test file and run the program three times. Each
>time it will print 0 and 4. BSD/OS prints 0 4, 0 8 and 0 12. Solaris
>and Linux print 0 4, 4 8 and 8 12.
The BSD/OS behaviour is the least surprising. The initial offsets
of zero may even be required (if no other process writes to the file).
POSIX.1 specifies fopen() to just use open(), and freopen() to do much
the same thing as fopen(). Therefore, the initial offsets at the file
descriptor level are zero, and for "a+" mode, an initial read would
start at the beginning of the file. Only the fuzzy specification of
permits the initial offsets at the stream level to be nonzero.
Bruce
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199811100830.AAA25413>
