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

获取文件属性信息,在终端下能够直接利用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!\n");
if(stat(argv[1],&buf)==-1)
printf("get the stat is faild!\n");

printf("st_dev:%d\n",buf.st_dev);
printf("st_ino:%d\n",buf.st_ino);
printf("st_mode:%d\n",buf.st_mode);
printf("st_nlink:%d\n",buf.st_nlink);
printf("st_uid:%d\n",buf.st_uid);
printf("st_gid:%d\n",buf.st_gid);
printf("st_rdev:%d\n",buf.st_rdev);
printf("st_size:%d\n",buf.st_size);
printf("st_blksize:%d\n",buf.st_blksize);
printf("st_atime:%s\n",ctime(&buf.st_atime));
printf("st_mtime:%s\n",ctime(&buf.st_mtime));
printf("st_ctime:%s\n",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;  
}  



posted @ 2017-04-25 19:55  llguanli  阅读(211)  评论(0编辑  收藏  举报