Linux 下C语言获取文件大小

 更新时间:2017年07月05日 09:58:24   投稿:lqh  
这篇文章主要介绍了Linux 下C语言获取文件大小的相关资料,需要的朋友可以参考下

Linux 下C语言获取文件大小

C语言是一种比较底层的语言,有时在其他语言中很容易操作的事情,在c语言中就比较麻烦,例如获取一个文件的大小。Java中File类有个length函数,Python中os.path包中有个getsize函数,C语言中却没有直接对应的函数获取文件大小。

       目前,网上有一种流传很广的方法,读取文件到内存,然后跳转到文件末尾,查看跳转的长度。代码如下:

int file_size(char* filename) 
{ 
  FILE *fp=fopen(filename,"r"); 
  if(!fp) return -1; 
  fseek(fp,0L,SEEK_END); 
  int size=ftell(fp); 
  fclose(fp); 
   
  return size; 
} 

上述方法利用fseek移动一个文件的存取位置到文件的末尾,然后利用ftell获得目前的文件访问位置。这种方法可以认为是一种间接的获取方式。虽说可以获得文件大小,但是有两个缺点。首先,ftell的返回值为long,在不同环境下占用的字节数也不同,这就可能存在long是四个字节的情况。此时,获取的文件大小就不能超过2G,否则就会出错。

但是,上述缺点在大多数情况下都没问题,超大文件还可以通过fsetpos和fgetpos获取文件大小。最致命的缺陷就是它需要加载文件到内存,然后跳转到文件末尾,这个操作非常耗时!可能在读取少量文件时体现不出,但是当文件达到上万个时,速度就会慢的要命,这种方法相当于把所有的文件都读到内存中一遍!

如果可能,尽量避免采用上述间接的方式获取文件大小。在Linux下,还有一种更简单的方式,通过读取文件信息获得文件大小,速度也快很多。代码如下:

#include <sys/stat.h> 
int file_size2(char* filename) 
{ 
  struct stat statbuf; 
  stat(filename,&statbuf); 
  int size=statbuf.st_size; 
 
  return size; 
} 

这种方式首先获得相关文件的状态信息,然后从状态信息中读取大小信息。由于没有读取文件的操作,所以操作速度非常快。强烈建议大家在linux下使用这种方式。Windows平台下肯定也有类似的函数读取文件信息,不过本人常年不在windows下编程,所以在此不做介绍。

相关文章

  • shell结合expect写的批量scp脚本工具

    shell结合expect写的批量scp脚本工具

    expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh之类需要用户手动输入密码然后确认的任务。有了这个工具,定义在scp过程中可能遇到的情况,然后编写相应的处理语句,就可以自动地完成scp操作了
    2013-02-02
  • Linux动态库函数的详解

    Linux动态库函数的详解

    这篇文章主要介绍了Linux动态库函数的详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分的内容,需要的朋友可以参考下
    2017-10-10
  • bash shell的条件语句详解

    bash shell的条件语句详解

    文章主要介绍了bash shell中的条件语句,包括if-then-fi、else、elif等结构的使用规则,以及条件判断符号(如-eq、-lt等)的正确使用方法,感兴趣的朋友一起看看吧
    2024-12-12
  • Linux中10个有用的命令行补全例子

    Linux中10个有用的命令行补全例子

    这篇文章主要为大家详细介绍了Linux中10个有用的命令行补全例子,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Linux系统诊断之内存基础深入详解

    Linux系统诊断之内存基础深入详解

    这篇文章主要介绍了Linux系统诊断之内存基础深入详解,虽然是基础但是列举的很详细,有感兴趣的同学可以研究下
    2021-03-03
  • shell SNAT与DNAT的使用与区别

    shell SNAT与DNAT的使用与区别

    本文主要介绍了shell SNAT与DNAT的使用与区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • linux批量备份服务器配置文件和目录的脚本

    linux批量备份服务器配置文件和目录的脚本

    这篇文章主要介绍了linux下批量备份服务器配置文件和目录的方法,需要的朋友可以参考下
    2013-08-08
  • Linux下实现SNMP一键安装的Shell脚本

    Linux下实现SNMP一键安装的Shell脚本

    这篇文章主要介绍了Linux下实现SNMP一键安装的Shell脚本,非常实用,需要的朋友可以参考下
    2014-07-07
  • 详解如何在Linux中创建和使用别名命令

    详解如何在Linux中创建和使用别名命令

    Linux 用户经常需要反复使用一个命令,一遍又一遍地键入或复制相同的命令会降低您的工作效率并分散您对应该做的事情的注意力,这个时候我们可以通过为最常用的命令创建别名来节省一些时间,接下来将给大家介绍一下如何在Linux中创建和使用别名命令
    2023-07-07
  • Linux awk将文件某列按照逗号分隔的例子

    Linux awk将文件某列按照逗号分隔的例子

    今天小编就为大家分享一篇关于Linux awk将文件某列按照逗号分隔的例子,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12

最新评论