linux写文件占用空间0字节,linux下文件的大小到底多大

文件的大小和实际占用的空间,是俩回事儿,一般情况下,文件大小 < 其占用空间的大小, 即

ls -al file_name 小于 du -sk file_name 的大小 ,原因是:占用空间取决于文件系统的块(block)的大小,linux一般默认是4k(4096) ,因此,一个大小为1个字节的文件,最小也要占用4k.但是,如果文件有空洞,那么就会相反,比如,向一个偏移很大的地址写入数据(超过文件尾端),那么文件里面就会形成空洞,这个空洞占用文件大小,但是不占用实际的磁盘大小.如下是测试程序:

#include

#include

#include

#include

#include

#include

#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)

const char *pBegin = "hello world ";

const char *pEnd = "hellok kitty ";

void err_prt(const char *msg){

printf("%s", msg);

}

int main(int argc, char *argv[]){

int fd;

if((fd = creat("./file.test", FILE_MODE)) < 0)

err_prt("creat error");

if(write(fd, pBegin, strlen(pBegin)) != (unsigned int)strlen(pBegin))

err_prt("buf1 write error");

if(lseek(fd, 10240, SEEK_SET) == -1)

err_prt("lseek error");

if(write(fd, pEnd, strlen(pEnd)) != (unsigned int)strlen(pEnd))

err_prt("write error");

return 0;

}

ls -al file.test

-rw-r–r-- 1 zzc zzc 10253 11月 19 17:49 file.test

du -sh file.test

8.0K file.test

vim file.test 可以看出来,只有文件起始有写入的字符串,其它地方都是空0,文件磁盘占用空间8K,是因为起始写入的俩个字符串,各占据一个文件块,所以是8K。我的公众号:时光流转 :,欢迎更多一起学习沟通分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值