zoukankan      html  css  js  c++  java
  • [转]stat函数说明

    1 函数都是获取文件(普通文件,目录,管道,socket,字符,块()的属性。


    函数原型
    #include <sys/stat.h>

    int stat(const char *restrict pathname, struct stat *restrict buf);
    提供文件名字,获取文件对应属性。


    int fstat(int filedes, struct stat *buf);
    通过文件描述符获取文件对应的属性。


    int lstat(const char *restrict pathname, struct stat *restrict buf);
    连接文件描述命,获取文件属性。


    2 文件对应的属性
    struct stat

    {
            mode_t     st_mode;       //文件对应的模式,文件,目录等
            ino_t      st_ino;       //inode节点号
            dev_t      st_dev;        //设备号码
            dev_t      st_rdev;       //特殊设备号码
            nlink_t    st_nlink;      //文件的连接数
            uid_t      st_uid;        //文件所有者
            gid_t      st_gid;        //文件所有者对应的组
            off_t      st_size;       //普通文件,对应的文件字节数
            time_t     st_atime;      //文件最后被访问的时间
            time_t     st_mtime;      //文件内容最后被修改的时间
            time_t     st_ctime;      //文件状态改变时间
            blksize_t st_blksize;    //文件内容对应的块大小
            blkcnt_t   st_blocks;     //伟建内容对应的块数量
    };


    可以通过上面提供的函数,返回一个结构体,保存着文件的信息。

    stat函数

    2008-07-26 20:25

    /* 最近要做简单的linux文件管理的功能,用到函数相继贴出来.很乱,待总结!*/

    /*reference :http://www.lslnet.com/linux/dosc1/10/linux-154990.htm*/
    /* dir.c */
    #include <sys/types.h>
    #include <dirent.h>
    #include <sys/stat.h>
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    extern int errno;
    /*
    DIR *opendir(const char *name);
    struct dirent *readdir(DIR *dir);
    int closedir(DIR *dir);
    */
    int main(int argc,char *argv[])
    {
    DIR *dir;
    struct dirent *pdir;
    struct stat st;
    char buf[1024];
    char c_type[6][9]={"普通文件","目录","连接","\0","其他格式","\0"};
    int type;
    int n;
    if(argc>2)
    {
    printf("Usage: dir /path\n");
    return 0;
    }
    if(argc==2)
    strncpy(buf,argv[1],99);
    else
    strcpy(buf,".");
    printf("%s\n\n",buf);
    dir=opendir(buf);
    if(dir==NULL)
    {
    printf("Can not open %s\n",buf);
    return 0;
    }
    n = strlen(buf);
    if (buf[n-1] != '/') {
    strcat(buf, "/");
    n++;
    }
    while((pdir=readdir(dir))!=NULL)
    {
    strcat(buf, pdir->d_name);
    if(stat(buf,&st)==0)
    {
    if(st.st_mode&S_IFREG)
    type=0;
    else if(st.st_mode&S_IFDIR)
    type=1;
    else if(st.st_mode&S_IFLNK)
    type=2;
    else type=4;
    printf("%-10s%-20s%7d\n",c_type[type],pdir->d_name,(int)st.st_size);
    }
    else
    printf("%-20s%-10d%-10d\n",pdir->d_name,st.st_mode,errno);
    bzero(&st,sizeof(struct stat));
    buf[n]='\0';
    }
    closedir(dir);
    return 0;

  • 相关阅读:
    MySQL 之 索引原理与慢查询优化
    MySQL 之【视图】【触发器】【存储过程】【函数】【事物】【数据库锁】【数据库备份】
    MySQL 之 数据操作
    MySQL 之 表操作
    MySQL 之 库操作
    MySQL 之 基本概念
    MySQL 练习2
    MySQL 练习
    MySQL 环境搭建之解压方式安装
    python3 下载必应每日壁纸(三)
  • 原文地址:https://www.cnblogs.com/pulas/p/2364524.html
Copyright © 2011-2022 走看看