• S_ISREG等几个常见的宏(转)


    stat函数讲解:

    表头文件: #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 stat(const char *file_name,struct stat *buf); 
    int fstat(int filedes,struct stat *buf); 
    stat 结构定义于:/usr/include/sys/stat.h 文件中
      struct stat finfo;
      stat( sFileName, &finfo );
      int size = finfo. st_size;
      struct stat {
      mode_t st_mode; //文件对应的模式,文件,目录等
      ino_t st_ino; //i-node节点号
      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用来判断没有打开的文件,而fstat用来判断打开的文件.我们使用最多的属性是st_mode.通过着属性我们可以判断给定的文件是一个普通文件还是一个目录,连接等等.可以使用下面几个宏来判断.
    S_ISLNK(st_mode):是否是一个连接.

    S_ISREG是否是一个常规文件.

    S_ISDIR是否是一个目录

    S_ISCHR是否是一个字符设备.

    S_ISBLK是否是一个块设备

    S_ISFIFO是否是一个FIFO文件.

    S_ISSOCK是否是一个SOCKET文件. 

    用法:

    //定义一个结构体
    struct stat m;

    //用户输入的文件名(用来判断是否是目录)。
    char *filename;

    int a;
    int n = stat(filename,&m);
    a = S_ISDIR(m.st_mode);

    如果a为真,则说明是目录,否则不是。

  • 相关阅读:
    正则表达式
    JS逻辑算法
    js函数
    JS运算符的应用
    JS课堂笔记
    json模块学习
    什么是面向对象,以及如何定义对象,实例化对象
    什么是面向过程,以及代码展示
    什么是元类,以及用type类来产生类.
    python下载安装
  • 原文地址:https://www.cnblogs.com/jikexianfeng/p/6210703.html
Copyright © 2020-2023  润新知