linux - 在 ext3 和 XFS 上创建具有备用数据和空洞的稀疏文件

标签 linux filesystems block

我创建了 1 个程序来创建包含备用空 block 和数据 block 的稀疏文件。 例如block1=empty, block2=data, block3=empty .....

#define BLOCK_SIZE 4096
void *buf;
int main(int argc, char **argv)
{
buf=malloc(512);
memset(buf,"a",512);
int fd=0;
int i;
int sector_per_block=BLOCK_SIZE/512;
int block_count=4;
if(argc !=2 ){
        printf("Wrong usage\n USAGE: program absolute_path_to_write\n");
        _exit(-1);
}
fd=open(argv[1],O_RDWR | O_CREAT,0666);
if(fd <= 0){
        printf("file open failed\n");
        _exit(0);
}
while(block_count > 0){
        lseek(fd,BLOCK_SIZE,SEEK_CUR);
        block_count--;
        for(i=0;i<sector_per_block;i++)
        write(fd,buf,512);
        block_count--;
}
close(fd);
return 0;
}

假设,我使用上面的代码创建了一个 new_sparse_file。

当我运行这个程序时,在 block 大小为 4KB 的 ext3 FS 上,ls -lh 显示 new_sparse_file 的大小为 16KB,而 du -h 显示为 8 kb,这,我认为是正确的。

在 xfs 上, block 大小为 4kb,ls -lh 显示 16KB,但 `du -h* 显示 12kb。

为什么会有不同种类的行为?

最佳答案

关于linux - 在 ext3 和 XFS 上创建具有备用数据和空洞的稀疏文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6940516/

相关文章:

java - 如何解决 Java 错误 "The system cannot find the path specified"?

node.js - Nodejs检查给定的字符串是否是有效的文件系统路径而不实际检查文件系统

java - MouseWheelListener block 滚动

linux - 负责配置进程数和线程数的Linux配置参数有哪些?

linux - Nagios Web 界面访问,在本地主机上没有斜杠

linux - 如何列出目录和子目录中的文件?

Docker:在内存文件系统中

ios - UIScrollView动画问题

Magento:为所有 child 阻止unsetChild吗?

c - long 的大小等于单词的大小吗