首页 > 其他 > 详细

stat/lstat函数

时间:2021-02-13 08:50:51      阅读:31      评论:0      收藏:0      [点我收藏+]

1.获取文件属性

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; //文件字节数(文件大小)
  blksize_t st_blksize; //块大小(文件系统的I/O 缓冲区大小)
  blkcnt_t st_blocks; //块数
  time_t st_atime; //最后一次访问时间
  time_t st_mtime; //最后一次修改时间
  time_t st_ctime; //最后一次改变时间(指属性)
};
 
st_mode -- 16位数
技术分享图片

 

 0-2 bit -- 其他人权限

  S_IROTH 00004 读权限
  S_IWOTH 00002 写权限
  S_IXOTH 00001 执行权限
  S_IRWXO 00007 掩码, 过滤 st_mode中除其他人权限以外的信息
 
3-5 bit -- 所属组权限
  S_IRGRP 00040 读权限
  S_IWGRP 00020 写权限
  S_IXGRP 00010 执行权限
  S_IRWXG 00070 掩码, 过滤 st_mode中除所属组权限以外的信息
 
6-8 bit -- 所有者权限
  S_IRUSR 00400 读权限
  S_IWUSR 00200 写权限
  S_IXUSR 00100 执行权限
  S_IRWXU 00700 掩码, 过滤 st_mode中除文件所有者权限以外的信息
 
  例:判断文件所有者是否有读权限
  if(st_mode & S_IRUSR){ }
 
12-15 bit -- 文件类型
  S_IFSOCK 0140000 套接字
  S_IFLNK 0120000 符号链接(软链接)
  S_IFREG 0100000 普通文件
  S_IFBLK 0060000 块设备
  S_IFDIR 0040000 目录
  S_IFCHR 0020000 字符设备
  S_IFIFO 0010000 管道
  S_IFMT 0170000 掩码,过滤 st_mode中除文件类型以外的信息
  
  例:判断文件是否为普通文件类型:
  if((st_mode & S_IFMT) == S_IFREG){ }
 
函数原型: 
  int stat(const char *path, struct stat *buf);
  int lstat(const char *path, struct stat *buf);
  int fstat(int fd,struct stat *buf);
  stat读取的是连接文件指向的文件的属性
  lstat读取的链接文件本身的属性(追踪,穿透)
  fstat通过文件描述符获取文件的属性
 

stat/lstat函数

原文:https://www.cnblogs.com/czhdbk/p/14399331.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!