Messages in this thread |  | | From | Jim Nance <> | Subject | 64 Bits from Larry McVoy | Date | Mon, 4 Nov 1996 08:02:36 -0500 (EST) |
| |
Forwarded message:
> Linux is 64 bit in that the types are right. Linux is not 64 bit in that > the file systems don't support >32 bit offsets (something that wouldn't > be hard to fix, sounds like a version number on ext2fs).
Well Larry, I was almost sure you were wrong, so I wrote the following test program. Unfortunatly, I did manage to tickle enough linux bugs so that you can claim you are right :-) So instead of claiming victory, I will submit a bug report :-( For those intrested in reproducing this, I am running Redhat 4.0 with redhats kernel, and the partition I am working contains an 800MB ext2 file system. Here is the program. It tries to make a large sparse file:
#include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>
#define GB ((long)(1024*1024*1024)/2) #define NG (20L)
int main() { off_t offset; int fd = open("bigfile", O_CREAT|O_TRUNC|O_WRONLY);
if(fd<0) {perror("open:"); exit(1);}
for(offset=0; offset<NG*GB; offset += GB) { int num; off_t pos = lseek(fd, offset, SEEK_SET); if(pos!=offset) {perror("lseek:"); exit(1);} num=write(fd,"x",1); if(num!=1) {perror("write:"); exit(1);} }
printf("Done!"); return 0; }
The first thing to notice is that I have divided GB by 2. If I don't do this the program fails after making a 1G file, and I get a nice printk() from the ext2fs. So I divided by two and reran. Now I can make a very large file, but something is still wrong:
total 76 -rwxrwxrwx 1 jlnance users 14378 Nov 4 07:39 a.out* -rw-rw-rw- 1 jlnance users 544 Nov 4 07:38 big.c -r-xrwS--T 1 jlnance users 10200547329 Nov 4 07:43 bigfile*
I don't know how the S--T bits got set on bigfile, but I certainly did not mean to do it. I have also found that if I do much in the directory containing bigfile, its size will eventually shrink down to 1.6G.
Anyone have any ideas?
Jim
|  |