• 获得文件属性的函数调用实例


    获取文件属性信息,在终端下能够直接利用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;  
    }  
    



  • 相关阅读:
    show processlist 输出ID 和 information_schema.PROCESSLIST 的id,information_schema.innodb_trx的TRX_MYSQL_T
    用 Flask 来写个轻博客 (15) — M(V)C_实现博文页面评论表单
    第十二章 对象(下)
    十大最值得关注的国内大数据分析厂商
    第十二章 对象(上)
    mysql 区间锁 对于没有索引 非唯一索引 唯一索引 各种情况
    insert into select 堵塞update
    监控持有sql和被堵塞的sql
    人生应该有间隔年——北漂18年(75)
    ERROR: transport error 202: connect failed: Connection timed out
  • 原文地址:https://www.cnblogs.com/llguanli/p/6764003.html
Copyright © 2020-2023  润新知