关于文件块数的问题
请问再linux下stat()函数的返回的stat结构体有3个域:
off_t st_size; /* total size, in bytes */
blksize_t st_blksize; /* blocksize for filesystem I/O */
blkcnt_t st_blocks; /* number of blocks allocated */
按照上面的解释因该是st_size=st_blksize*st_blocks
可实际上却不是这样,哪位高人能办我解决这个问题,谢谢了
File: `a.out '
Size: 5031 Blocks: 24 IO Block: 4096 regular file
Device: 310h/784d Inode: 16813 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2007-04-27 11:13:39.000000000 +0800
Modify: 2007-04-27 11:13:38.000000000 +0800
Change: 2007-04-27 11:13:38.000000000 +0800
------解决方案--------------------首先,文件存储的单位至少是block,也就是不到1个block大小的文件也会至少占用1个block。
其次,为了减少文件的碎片,Ext2文件系统尽力在已分配给文件的最后一个块附近找一个新块
分配给该文件。如果失败,Ext2文件系统又在包含这个文件索引节点的块组中搜寻一个
新的块。作为最后一个办法,可以从其他一个块组中获得空闲块。
Ext2文件系统使用数据块的预分配策略。文件并不仅仅获得所需要的块,而是获得一组
多达8 个邻接的块。
在我的机器上,reiserfs文件系统,5k多的文件是16个block,对于你的例子,不知道为什么是24个,也许是文件系统不一样。你可以多试几个文件,看看是否都是24.