获取文件大小这里有两种方法:

方法一、

范例:

  1. unsigned long get_file_size(const char *path)
  2. {
  3. unsigned long filesize = -1;
  4. FILE *fp;
  5. fp = fopen(path, "r");
  6. if(fp == NULL)
  7. return filesize;
  8. fseek(fp, 0L, SEEK_END);
  9. filesize = ftell(fp);
  10. fclose(fp);
  11. return filesize;
  12. }

此种以打开文件的方法取得文件的大小,不适合大文件,并且可能会出现访问冲突(比如正在下载的文件),效率也比较低

方法二、

范例:

  1. #include <sys/stat.h>
  2. unsigned long get_file_size(const char *path)
  3. {
  4. unsigned long filesize = -1;
  5. struct stat statbuff;
  6. if(stat(path, &statbuff) < 0){
  7. return filesize;
  8. }else{
  9. filesize = statbuff.st_size;
  10. }
  11. return filesize;
  12. }

此种使用读取文件属性的方法得到文件的大小,效率较高,也较稳定

下面将stat的详细信息粘贴出来:

stat(取得文件状态)     
相关函数     fstat,lstat,chmod,chown,readlink,utime 
  
表头文件     #include <sys/stat.h> 
#include <unistd.h> 
  
定义函数     int   stat(const   char   *   file_name,struct   stat   *buf); 
  
函数说明     stat()用来将参数file_name所指的文件状态,复制到参数buf所指的结构中。 
下面是struct   stat内各参数的说明 
struct   stat 

dev_t   st_dev;   /*device*/ 
ino_t   st_ino;   /*inode*/ 
mode_t   st_mode;   /*protection*/ 
nlink_t   st_nlink;   /*number   of   hard   links   */ 
uid_t   st_uid;   /*user   ID   of   owner*/ 
gid_t   st_gid;   /*group   ID   of   owner*/ 
dev_t   st_rdev;   /*device   type   */ 
off_t   st_size;   /*total   size,   in   bytes*/ 
unsigned   long   st_blksize;   /*blocksize   for   filesystem   I/O   */ 
unsigned   long   st_blocks;   /*number   of   blocks   allocated*/ 
time_t   st_atime;   /*   time   of   lastaccess*/ 
time_t   st_mtime;   /*   time   of   last   modification   */ 
time_t   st_ctime;   /*   time   of   last   change   */ 
}; 
st_dev   文件的设备编号 
st_ino   文件的i-node 
st_mode   文件的类型和存取的权限 
st_nlink   连到该文件的硬连接数目,刚建立的文件值为1。 
st_uid   文件所有者的用户识别码 
st_gid   文件所有者的组识别码 
st_rdev   若此文件为装置设备文件,则为其设备编号 
st_size   文件大小,以字节计算 
st_blksize   文件系统的I/O   缓冲区大小。 
st_blcoks   占用文件区块的个数,每一区块大小为512   个字节。 
st_atime   文件最近一次被存取或被执行的时间,一般只有在用mknod、utime、read、write与tructate时改变。 
st_mtime   文件最后一次被修改的时间,一般只有在用mknod、utime和write时才会改变 
st_ctime   i-node最近一次被更改的时间,此参数会在文件所有者、组、权限被更改时更新先前所描述的st_mode   则定义了下列数种情况 
S_IFMT   0170000   文件类型的位遮罩 
S_IFSOCK   0140000   scoket 
S_IFLNK   0120000   符号连接 
S_IFREG   0100000   一般文件 
S_IFBLK   0060000   区块装置 
S_IFDIR   0040000   目录 
S_IFCHR   0020000   字符装置 
S_IFIFO   0010000   先进先出 
S_ISUID   04000   文件的(set   user-id   on   execution)位 
S_ISGID   02000   文件的(set   group-id   on   execution)位 
S_ISVTX   01000   文件的sticky位 
S_IRUSR(S_IREAD)   00400   文件所有者具可读取权限 
S_IWUSR(S_IWRITE)00200   文件所有者具可写入权限 
S_IXUSR(S_IEXEC)   00100   文件所有者具可执行权限 
S_IRGRP   00040   用户组具可读取权限 
S_IWGRP   00020   用户组具可写入权限 
S_IXGRP   00010   用户组具可执行权限 
S_IROTH   00004   其他用户具可读取权限 
S_IWOTH   00002   其他用户具可写入权限 
S_IXOTH   00001   其他用户具可执行权限 
上述的文件类型在POSIX   中定义了检查这些类型的宏定义 
S_ISLNK   (st_mode)   判断是否为符号连接 
S_ISREG   (st_mode)   是否为一般文件 
S_ISDIR   (st_mode)是否为目录 
S_ISCHR   (st_mode)是否为字符装置文件 
S_ISBLK   (s3e)   是否为先进先出 
S_ISSOCK   (st_mode)   是否为socket 
若一目录具有sticky   位(S_ISVTX),则表示在此目录下的文件只能被该文件所有者、此目录所有者或root来删除或改名。 
  
返回值     执行成功则返回0,失败返回-1,错误代码存于errno 
  
错误代码     ENOENT   参数file_name指定的文件不存在 
ENOTDIR   路径中的目录存在但却非真正的目录 
ELOOP   欲打开的文件有过多符号连接问题,上限为16符号连接 
EFAULT   参数buf为无效指针,指向无法存在的内存空间 
EACCESS   存取文件时被拒绝 
ENOMEM   核心内存不足 
ENAMETOOLONG   参数file_name的路径名称太长 
  
范例     #include <sys/stat.h> 
#include <unistd.h> 
mian() 

struct   stat   buf; 
stat   (“/etc/passwd”,&buf); 
printf(“/etc/passwd   file   size   =   %d   /n”,buf.st_size); 

  
执行     /etc/passwd   file   size   =   705

linux下C获取文件的大小的更多相关文章

  1. Linux C 获取 文件的大小

    通过Linux C库函数来获取文件的大小 #include <unistd.h> #include <sys/types.h> #include <sys/stat.h& ...

  2. Linux下几种文件传输命令

    Linux下几种文件传输命令 sz rz sftp scp 最近在部署系统时接触了一些文件传输命令,分别做一下简单记录: 1.sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具 ...

  3. Linux下java获取CPU、内存、磁盘IO、网络带宽使用率

    一.CPU 使用proc文件系统,"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系统内核数据的操作提供接口.用户和应用程序可以通过proc得 ...

  4. Linux下校验下载文件的完整性(MD5,SHA1,PGP)

    查看: Linux下校验下载文件的完整性(MD5,SHA1,PGP) http://blog.useasp.net/archive/2014/03/29/use-md5-sha1-or-pgp-to- ...

  5. Linux中查看各文件夹大小(扫盘)

    df -h ./ du -hs ./ du -h /ifs4/BC_RD/USER/lizhixin/my_project/human_chr22 | grep [[:digit:]+]G du [- ...

  6. Linux中查看各文件夹大小命令:du -h --max-depth=1

    Linux中查看各文件夹大小命令:du -h --max-depth=1 du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-siz ...

  7. Linux下打开超大文件的方法

    Linux下打开超大文件方法 在Linux下用VIM打开大小几个G.甚至几十个G的文件时,是非常慢的. 这时,我们可以利用下面的方法分割文件,然后再打开. 1 查看文件的前多少行 head -1000 ...

  8. 用脚本如何实现将Linux下的txt文件批量转化为Windows下的txt文件?

    众所周知,Windows和Linux的文件换行回车格式不同,Windows下换行格式是\r\n(回车+换行),Linux下换行格式为\n(只是换行),因此,其中一个操作系统的文本文件若需要在另外一个中 ...

  9. 【Linux学习】Linux下用户组、文件权限详解

    原文地址:http://www.cnblogs.com/123-/p/4189072.html Linux下用户组.文件权限详解 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在li ...

随机推荐

  1. nginx+php+mysql+zabbix服务器安装

    好久没有接触监控类的软件了,今天抽空搭建了下 首先系统环境 zabbix-server-1    centos7.2 本次所需的第三方软件包 以下软件包通过官网下载 zabbix-3.0.3.tar. ...

  2. Oracle基础知识点——Oracle服务端和客户端

    Oracle服务端 服务端提供oracle服务的实例,其是数据库的核心,用于数据库的管理,对象的管理与存储.数据的存储.查询.数据库资源的监控.监听等一些服务. 例子:比如一台机子上安装了Oracle ...

  3. Bootstrap3基础 栅格系统 col-md-offset 向右偏移

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...

  4. C语言学习——bsmap-2.74_main.cpp

    素材路径:https://www.codeforge.cn/read/428275/bsmap-2.74-_-main.cpp__html 1.C/C++预处理指令,常见的预处理指令如下: #空指令, ...

  5. Vue-admin工作整理(十二):Vuex-插件(持久化存储)

    Vuex可以支持插件形式,来处理指定业务,比如:持久化存储的插件(当每次刷新浏览器的时候store里面的参数都会被清除,因为它是存在内存中的,而不是存在本地的,有时候我们希望将一些东西存在本地) 插件 ...

  6. 【MVC】ASP.NET MVC之数据验证

    前端传到后端数据的不可信任性,DRY("Don't Repeat Yourself") 设计原则.MVC3.0出了后端数据验证特性,鼓励你只定义一次功能或行为,然后在应用程序中各处 ...

  7. 创建X个任意元素数组并且可以遍历的的一个方法

    方法一: Array.apply(null, { length: 20 })分析:apply 第二个参数应该是数组,现在把 { length: 20 } 转化为数组,就是一个长度为X的数组(类数组对象 ...

  8. Springboot 中配置文件的优先级和加载顺序

    1. 若application.yml 和bootStrap.yml 在同一目录下,则bootStrap.yml 的加载顺序要高于application.yml,即bootStrap.yml  会优先 ...

  9. GT sport真实赛道详解 - Brands Hatch | 伯蘭士赫治GP賽車場

    参考:GT sport所有赛道简介 GT Sport - Tip/Guide For FASTER LAP TIMES (Brands Hatch) 赛道介绍.跑法.赛事网上都有大把的视频. GT s ...

  10. JMETER-02

    JMeter使用篇 1.界面介绍 2.JMeter-测试计划 测试计划:一个JMeter脚本只有一个测试计划,且测试计划必须启用状态 容易掉的坑:由于JMeter脚本中的每个元器件都可以单独禁用,上级 ...