linux下文件的大小到底多大

Posted zds78

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下文件的大小到底多大相关的知识,希望对你有一定的参考价值。

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

    #include <stdio.h>
    #include <fcntl.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    #include <unistd.h>
    #include <string.h>
    
    #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。我的公众号:时光流转 :,欢迎更多一起学习沟通分享。










































以上是关于linux下文件的大小到底多大的主要内容,如果未能解决你的问题,请参考以下文章

linux下查看内存的命令

linux查看磁盘下都有哪些文件

linux下socket接收缓冲区有多大?如何查看和修改,望高手赐教

如何在LINUX下查看内存大小(C语言)

linux下目录大小为什么是4K?一个目录下最多有个多少个子目录?最多有多少个文件?ls -l显示的内容中total到底是什么?

Suse linux查询内存大小的指令是啥?