当前位置:   article > 正文

C++:stat函数_c++ stat

c++ stat

函数原型:int stat(const char *pathname, struct stat *statbuf)

函数作用:用于获取文件状态信息

使用函数需要包含头文件:

       #include <sys/types.h>
       #include <sys/stat.h>
       #include <unistd.h>

stat函数在 statbuf 指向的缓冲区中返回有关文件的信息。 

返回值:成功返回0;失败返回-1

stat结构:
函数调用返回一个 stat 结构,其中包含以下字段: 

  1. struct stat
  2. {
  3.             dev_t     st_dev;         /* ID of device containing file */文件使用的设备号
  4.             ino_t     st_ino;         /* Inode number */ 索引节点号
  5.             mode_t    st_mode;        /* File type and mode */文件类型和模式
  6.             nlink_t   st_nlink;       /* Number of hard links */文件的硬连接数
  7.             uid_t     st_uid;         /* User ID of owner */所有者的用户ID
  8.             gid_t     st_gid;         /* Group ID of owner */所有者的组ID
  9.             dev_t     st_rdev;        /* Device ID (if special file) */设备ID
  10.             off_t     st_size;        /* Total size, in bytes */以字节为单位的文件容量
  11.             blksize_t st_blksize;     /* Block size for filesystem I/O */文件系统 I/O块大小
  12.             blkcnt_t  st_blocks;      /* Number of 512B blocks allocated */文件所占的磁盘块
  13.             /* 自 Linux 2.6 起,内核支持纳秒以下时间戳字段的精度。
  14. Linux 2.6 之前的详细信息,请参见注释。 */
  15.             struct timespec st_atim;  /* Time of last access*/最后一次访问该文件的时间
  16.             struct timespec st_mtim;  /* Time of last modification*/最后一次修改该文件的时间
  17.             struct timespec st_ctim;  /* Time of last status change*/最后一次修改文件状态的时
  18.           #define st_atime st_atim.tv_sec      /* 向后兼容 */
  19.             #define st_mtime st_mtim.tv_sec
  20.           #define st_ctime st_ctim.tv_sec
  21.            };

stat结构体中的st_mode 为文件类型定义了以下掩码值:

  1. S_IFMT 0170000 bit mask for the file type bit field
  2. S_IFSOCK 0140000 socket
  3. S_IFLNK 0120000 symbolic link
  4. S_IFREG 0100000 regular file
  5. S_IFBLK 0060000 block device
  6. S_IFDIR 0040000 directory
  7. S_IFCHR 0020000 character device
  8. S_IFIFO 0010000 FIFO

POSIX 还定义了额外的宏,以允许在 st_mode 中编写文件类型的测试更简洁。 

  1. S_ISREG(m) is it a regular file?
  2. S_ISDIR(m) directory?
  3. S_ISCHR(m) character device?
  4. S_ISBLK(m) block device?
  5. S_ISFIFO(m) FIFO (named pipe)?
  6. S_ISLNK(m) symbolic link? (Not in POSIX.1-1996.)
  7. S_ISSOCK(m) socket? (Not in POSIX.1-1996.)

测试例子:

  1. stat(pathname, &sb);
  2. if (S_ISREG(sb.st_mode))
  3. {
  4. /* Handle regular file */
  5. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/523232
推荐阅读
相关标签
  

闽ICP备14008679号