栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

在Linux下用C语言程序获取指点文件大小

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Linux下用C语言程序获取指点文件大小

在Linux里面有一个标准io操作光标的函数off_t lseek(int fd, off_t offset, int whence);,直接用他把光标移到最末尾就行了,这个函数的返回值就是当前光标位置相对于最前面的偏移量。(单位是字节)当然你的加上相应的头文件。

int file_size(char* filename) 
{ 
    int fd = open(filename, O_RDONLY);//只读方式打开就够了
    off_t num = lseek(fd, 0, SEEK_END);
    close(fd);
    return num;
} 

当然你也可以使用系统io操作光标的函数int fseek(FILE *stream, long offset, int whence);,实现的思路也是一样的。

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; 
} 

关于lseek与fseek的区别可以参考:https://blog.csdn.net/jaken99/article/details/77686427

这个两个方法效率都不是最高的,都要打开文件读取数据,而且fseek还要将数据读取到内存上来再操作,当数据很大的时候效率就会很低。而且超过2Gfseek还会报错。

在Linux下,还有一种更简单的方式,通过读取文件信息获得文件大小,这个时候就快的多。

int file_size2(char* filename) 
{ 
    struct stat sta; 
    stat(filename,&sta); 
    int size=sta.st_size;  
    return size; 
} 

文件会有一个文件属性,里面维护这么一个结构体。

SYNOPSIS:
       #include
       #include
       #include

           struct stat {
               dev_t     st_dev;        
               ino_t     st_ino;        
               mode_t    st_mode;        
               nlink_t   st_nlink;      
               uid_t     st_uid;        
               gid_t     st_gid;        
               dev_t     st_rdev;        

               off_t     st_size;       
               blksize_t st_blksize;    
               blkcnt_t  st_blocks;      

               

               struct timespec st_atim;  
               struct timespec st_mtim;  
               struct timespec st_ctim;  

           #define st_atime st_atim.tv_sec      
           #define st_mtime st_mtim.tv_sec
           #define st_ctime st_ctim.tv_sec
           };
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429747.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号