以例子结合命令理解,具体看下面内容
/********
hole.c
********/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
char buffer1[]="abcdefghijklmnop";
char buffer2[]="1234567890";
int main(void)
{
int fd;
if((fd=open("filehole",O_RDWR|O_TRUNC|O_CREAT))<0)
printf("create error/n");
if(write(fd,buf1,strlen(buf1))!=16)
printf("buf1 write error/n");
if(lseek(fd,10000,SEEK_SET)==-1)
printf("lseek error/n");
if(write(fd,buf2,strlen(buf2))!=10);
printf("buf2 write error/n");
close(fd);
return 0;
}
sudoo@sudoo-desktop:~/fhole$ gcc -o hole hole.c
sudoo@sudoo-desktop:~/fhole$ ./hole
sudoo@sudoo-desktop:~/fhole$ ls
filehole hole hole.c hole.c~
sudoo@sudoo-desktop:~/fhole$ ls -l filehole
-rw-r-x--T 1 sudoo sudoo 10010 2010-03-31 19:59 filehole
sudoo@sudoo-desktop:~/fhole$ cp --sparse=never filehole fileh
sudoo@sudoo-desktop:~/fhole$ ls
fileh filehole hole hole.c hole.c~
sudoo@sudoo-desktop:~/fhole$ ls -l fileh
-rw-r-x--- 1 sudoo sudoo 10010 2010-03-31 20:00 fileh
sudoo@sudoo-desktop:~/fhole$ od -c filehole
0000000 a b c d e f g h i j k l m n o p
0000020 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
*
0023420 1 2 3 4 5 6 7 8 9 0
0023432
sudoo@sudoo-desktop:~/fhole$ od -c fileh
0000000 a b c d e f g h i j k l m n o p
0000020 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0 /0
*
0023420 1 2 3 4 5 6 7 8 9 0
0023432
sudoo@sudoo-desktop:~/fhole$ stat filehole
File: “filehole”
Size: 10010 Blocks: 16 IO Block: 4096 普通文件
Device: 801h/2049d Inode: 297588 Links: 1
Access: (1650/-rw-r-x--T) Uid: ( 1000/ sudoo) Gid: ( 1000/ sudoo)
Access: 2010-03-31 19:59:41.000000000 +0800
Modify: 2010-03-31 19:59:40.000000000 +0800
Change: 2010-03-31 19:59:40.000000000 +0800
sudoo@sudoo-desktop:~/fhole$ stat fileh
File: “fileh”
Size: 10010 Blocks: 24 IO Block: 4096 普通文件
Device: 801h/2049d Inode: 297793 Links: 1
Access: (0650/-rw-r-x---) Uid: ( 1000/ sudoo) Gid: ( 1000/ sudoo)
Access: 2010-03-31 20:00:37.000000000 +0800
Modify: 2010-03-31 20:00:35.000000000 +0800
Change: 2010-03-31 20:00:35.000000000 +0800
sudoo@sudoo-desktop:~/fhole$ du filehole
8 filehole
sudoo@sudoo-desktop:~/fhole$ du fileh
12 fileh
sudoo@sudoo-desktop:~/fhole$ du -h filehole
8.0K filehole
sudoo@sudoo-desktop:~/fhole$ du -h fileh
12K fileh
sudoo@sudoo-desktop:~/fhole$