zoukankan      html  css  js  c++  java
  • 获得文件属性的函数调用实例

    获取文件属性信息,在终端下能够直接利用ls- l命令,在编程时,用到下面三个函数:

    #include<sys/types.h>
    #include<sys/stat.h>
    #include<unistd.h> 

    int stat(const char *file_name, struct stat *buf);

    函数说明:    通过文件名称filename获取文件信息,并保存在buf所指的结构体stat中
    返回值:     运行成功则返回0,失败返回-1,错误代码存于errno
    错误代码:
        ENOENT         參数file_name指定的文件不存在
        ENOTDIR        路径中的文件夹存在但却非真正的文件夹
        ELOOP          欲打开的文件有过多符号连接问题,上限为16符号连接
        EFAULT         參数buf为无效指针,指向无法存在的内存空间
        EACCESS        存取文件时被拒绝
        ENOMEM         核心内存不足
        ENAMETOOLONG   參数file_name的路径名称太长

    int fstat(int filedes, struct stat *buf);

    int lstat(const char *file_name, struct stat *buf);


    struct stat {
        dev_t         st_dev;       //文件的设备编号
        ino_t         st_ino;       //节点
        mode_t        st_mode;      //文件的类型和存取的权限
        nlink_t       st_nlink;     //连到该文件的硬连接数目。刚建立的文件值为1
        uid_t         st_uid;       //用户ID
        gid_t         st_gid;       //组ID
        dev_t         st_rdev;      //(设备类型)若此文件为设备文件,则为其设备编号
        off_t         st_size;      //文件字节数(文件大小)
        unsigned long st_blksize;   //块大小(文件系统的I/O 缓冲区大小)
        unsigned long st_blocks;    //块数
        time_t        st_atime;     //最后一次訪问时间
        time_t        st_mtime;     //最后一次改动时间
        time_t        st_ctime;     //最后一次改变时间(指属性)
    };

    #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); 


    编程实例1:

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

    编程实例2:

    #include<stdio.h>
    #include<unistd.h>
    #include<time.h>
    #include<sys/types.h>
    #include<sys/stat.h>
    int main(int argc,char *argv[])
    {
    struct stat buf;
    if(argc!=2)
    printf("input the parameter error!
    ");
    if(stat(argv[1],&buf)==-1)
    printf("get the stat is faild!
    ");
    
    printf("st_dev:%d
    ",buf.st_dev);
    printf("st_ino:%d
    ",buf.st_ino);
    printf("st_mode:%d
    ",buf.st_mode);
    printf("st_nlink:%d
    ",buf.st_nlink);
    printf("st_uid:%d
    ",buf.st_uid);
    printf("st_gid:%d
    ",buf.st_gid);
    printf("st_rdev:%d
    ",buf.st_rdev);
    printf("st_size:%d
    ",buf.st_size);
    printf("st_blksize:%d
    ",buf.st_blksize);
    printf("st_atime:%s
    ",ctime(&buf.st_atime));
    printf("st_mtime:%s
    ",ctime(&buf.st_mtime));
    printf("st_ctime:%s
    ",ctime(&buf.st_ctime));
    
    return 0;
    }


    补充:

    unsigned long get_file_size(const char *path)  
    {  
        unsigned long filesize = -1;  
        FILE *fp;  
        fp = fopen(path, "r");  
        if(fp == NULL)  
            return filesize;  
        fseek(fp, 0L, SEEK_END);  
        filesize = ftell(fp);  
        fclose(fp);  
        return filesize;  
    }  
    



  • 相关阅读:
    yum安装nginx没有某一模块,该如何添加第三方模块?
    二进制部署K8S集群(二十四)k8s技术点整理
    opencv在python和c#中的对照应用-文字区域识别
    小区配置地图中心坐标
    Exception: No supported Visual Studio can be found. Supported versions are: 16.0 (2019), 15.0 (2017)
    文件包含
    kali linux 安装lanmp遇到的问题
    嵌入式实操----基于RT1170 首板硬件之SDRAM调试(十二)
    嵌入式实操----基于RT1170 DCD数据开发入门记录(十一)
    嵌入式实操----基于RT1170解决串口不支持float类型打印问题(十)
  • 原文地址:https://www.cnblogs.com/llguanli/p/6764003.html
Copyright © 2011-2022 走看看