From owner-freebsd-hackers Mon Nov 22 12: 1:45 1999 Delivered-To: freebsd-hackers@freebsd.org Received: from bingnet2.cc.binghamton.edu (bingnet2.cc.binghamton.edu [128.226.1.18]) by hub.freebsd.org (Postfix) with ESMTP id DD7C815334 for ; Mon, 22 Nov 1999 12:01:35 -0800 (PST) (envelope-from zzhang@cs.binghamton.edu) Received: from sol.cs.binghamton.edu (cs1-gw.cs.binghamton.edu [128.226.171.72]) by bingnet2.cc.binghamton.edu (8.9.3/8.9.3) with SMTP id PAA19910 for ; Mon, 22 Nov 1999 15:01:17 -0500 (EST) Date: Mon, 22 Nov 1999 13:48:38 -0500 (EST) From: Zhihui Zhang To: freebsd-hackers@freebsd.org Subject: A file with holes - a bug? Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-hackers@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Please take a look at the following piece of code that creates a large hole in a file named hole.dat. It tries to write 0x30-0x39 both at the front and the tail of that file, the hole is therefore in the middle. main() { char c; FILE * fp; fp = fopen("hole.dat", "w"); for (c=0x30; c<0x3a; c++) fputc(c, fp); fputc('\n',fp); fflush(fp); /* XXX */ lseek(fileno(fp), 3 * 8192, SEEK_CUR); for (c=0x30; c<0x3a; c++) fputc(c, fp); fputc('\n',fp); fclose(fp); } If I remove the fflush(fp), then the characters 0x30-0x39 will be all written at the end of the file (use hexdump to find out), not as expected (one at the beginning and the other at the end). It seems to me that the first for loop happens AFTER the lseek() statement without fflush(). Can anyone explain this to me? I am using FreeBSD 3.3-Release. By the way, I also find out if you copy a file with holes into another file, the holes in the first file will be replaced with 0s in the second file, taking more disk space (check with du). Is there a better solution for this? Any help is appreciated. -Zhihui To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message