我要做的是在linux上编写一个C程序,如果有稀疏文件,该程序应在当前目录中检查,我也想打印磁盘的数量已经代表文件中差距的块和0填充但占用磁盘空间的磁盘块的数量。
到目前为止,我可以访问当前目录,并只用
打印文件DIR *dirp;
struct dirent *dp;
要使用稀疏文件完成第二部分,我尝试使用stat()
,但似乎没有工作,因为我没有得到所需的结果。
所以,有人可以告诉我如何用稀疏文件做零件吗?
如果要在稀疏文件中查找孔,请参见lseek
的manpage,特别是有关SEEK_HOLE
和SEEK_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
}
不确定它是否标识所有稀疏文件。