2005-12-16 11:41
littlestar
为什么剩下2G空间的磁盘分区能创建1T的磁盘文件,而不占空间呢?
为什么剩下2G空间的磁盘分区能创建1T的磁盘文件,而不占空间呢?以后读写它会有什么问题?
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda9 2.0G 283M 1.5G 15% /
/dev/sda3 494M 19M 449M 4% /boot
none 1005M 0 1005M 0% /dev/shm
/dev/sda6 2.0G 33M 1.8G 2% /tmp
/dev/sda8 22G 1.5G 19G 7% /usr
/dev/sda7 3.9G 79M 3.6G 3% /var
/dev/sda2 34G 26G 6.9G 79% /home
/dev/sdb1 134G 97G 30G 76% /data
为什么剩下2G空间的磁盘分区能创建1T的磁盘文件,而不占空间呢?
#gcc largefile.c
#./a.out
#ls -lta /tmp/foo
-rw------- 1 test test 1099511627788 12月 16 11:44 /tmp/foo
cat largefile.c
#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
int fd;
int ret;
char buf[] = "hello world\n";
long long off;
struct stat64 stat;
fd = open("/tmp/foo", O_RDWR | O_CREAT | O_LARGEFILE, 0600);
off = 0x10000000000LL;
ret = lseek64(fd, off, SEEK_SET);
if (ret < 0) {
perror("lseek64(): ");
return 1;
}
ret = write(fd, buf, sizeof(buf) - 1);
if (ret < 0) {
perror("write(): ");
return 1;
}
ret = fstat64(fd, &stat);
if (ret < 0) {
perror("fstat64(): ");
return 1;
}
printf("file size: %lld(%#llx) bytes\n", stat.st_size, stat.st_size);
close(fd);
return 0;
}