C- Linux稀疏文件:如何检查文件是否稀疏并打印0填充磁盘块



我要做的是在linux上编写一个C程序,如果有稀疏文件,该程序应在当前目录中检查,我也想打印磁盘的数量已经代表文件中差距的块和0填充但占用磁盘空间的磁盘块的数量。

到目前为止,我可以访问当前目录,并只用

打印文件
DIR *dirp;
struct dirent *dp;

要使用稀疏文件完成第二部分,我尝试使用stat(),但似乎没有工作,因为我没有得到所需的结果。

所以,有人可以告诉我如何用稀疏文件做零件吗?

如果要在稀疏文件中查找孔,请参见lseek的manpage,特别是有关SEEK_HOLESEEK_DATA的位。

如果您只想知道磁盘上的分配大小,请查看 stat (2)的manpage:

       struct stat {
           ...
           off_t     st_size;    /* total size, in bytes */
           ...
           blksize_t st_blksize; /* blocksize for file system I/O */
           blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
       };

st_size告诉您字节中的总尺寸,st_blksize * st_blocks为您提供了分配的尺寸。如果将st_size圆形到st_blksize的下一个倍数并减去文件大小,那就是孔的大小。

检查大小,由du实用程序返回,并与"表观大小"进行比较。如果您希望您可以从du

中查看块计数算法

您可以尝试使用以下技巧来使用STAT结果:

if (st.st_blocks * st.st_blksize < st.st_size) { 
  SPARSE-FILE 
} else { 
  PROBABLY NOT SPARSE
}

不确定它是否标识所有稀疏文件。

最新更新