我想要做的是在linux上编写一个C程序,如果有稀疏文件,应该在当前目录中检查,还要打印已经在文件中表示空白的磁盘块的数量,的磁盘块是0填充但占用磁盘空间。
到目前为止,我可以访问当前的目录,只打印文件
DIR *dirp; struct dirent *dp;
为了完成稀疏文件的第二部分,我尝试使用stat()
但似乎没有工作,因为我没有得到所需的结果,因为我希望。
那么,谁能告诉我如何用稀疏文件做零件?
如果您想在稀疏文件中查找漏洞,请参阅lseek
的联机帮助页,特别是有关SEEK_HOLE
和SEEK_DATA
的位。
如果你想知道磁盘上分配的大小,那么看一下manpage的stat (2)
:
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
utility返回,并与“外观尺寸”进行比较。 如果你希望你可以看看du
从块计数算法
统计结果你可以尝试下面的技巧:
if (st.st_blocks * st.st_blksize < st.st_size) { SPARSE-FILE } else { PROBABLY NOT SPARSE }
不知道是否识别所有稀疏文件。