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



  • 相关阅读:
    论 mysql 主键
    详解 hibernate 悲观锁 乐观锁 深入分析 代码实例
    Mysql 如何 删除大表
    JSP 不能用 不支持 STRUTS标签 报错 The Struts dispatcher cannot be found.
    struts2 防止重复提交 实例代码
    ECLIPSE MYECLIPSE 在线安装SVN
    powerdesigner中给一主键设为自增型auto_increment
    GDAL计算栅格图像统计值相关说明
    GDAL使用DEM数据计算坡度坡向
    到底什么是I/O Port,什么是Memorymapped I/O
  • 原文地址:https://www.cnblogs.com/llguanli/p/6764003.html
Copyright © 2011-2022 走看看