Skip site navigation (1)Skip section navigation (2)
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>