日期:2014-05-16  浏览次数:20715 次

关于文件块数的问题
请问再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.