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



  • 相关阅读:
    list转map,set,使用stream进行转化
    使用thymeleaf模板实现博客评论的异步刷新
    python 字典元组集合字符串
    python列表解析补充:
    python列表解析
    springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据
    配置github——每次提交后使contributions有记录(有小绿格子)
    github浏览器无法访问,并且idea无法push项目
    互联网协议入门
    http协议入门---转载
  • 原文地址:https://www.cnblogs.com/llguanli/p/6764003.html
Copyright © 2011-2022 走看看