博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
stat函数详解
阅读量:230 次
发布时间:2019-02-28

本文共 2242 字,大约阅读时间需要 7 分钟。

stat函数

  • ​ 作用:获取文件信息
  • ​ 头文件include <sys/types.h> #include <sys/stat.h> #include <unistd.h>
  • ​ 函数原型int stat(const char *path, struct stat *buf)
  • 返回值:成功返回0,失败返回-1;
  • 参数:文件路径(名),struct stat 类型的结构体

struct stat 结构体详解:

struct stat{    dev_t     st_dev;     /* ID of device containing file */文件使用的设备号    ino_t     st_ino;     /* inode number */    索引节点号     mode_t    st_mode;    /* protection */  文件对应的模式,文件,目录等    nlink_t   st_nlink;   /* number of hard links */    文件的硬连接数      uid_t     st_uid;     /* user ID of owner */    所有者用户识别号    gid_t     st_gid;     /* group ID of owner */   组识别号      dev_t     st_rdev;    /* device ID (if special file) */ 设备文件的设备号    off_t     st_size;    /* total size, in bytes */ 以字节为单位的文件容量       blksize_t st_blksize; /* blocksize for file system I/O */ 包含该文件的磁盘块的大小       blkcnt_t  st_blocks;  /* number of 512B blocks allocated */ 该文件所占的磁盘块      time_t    st_atime;   /* time of last access */ 最后一次访问该文件的时间       time_t    st_mtime;   /* time of last modification */ /最后一次修改该文件的时间       time_t    st_ctime;   /* time of last status change */ 最后一次改变该文件状态的时间   };

stat结构体中的st_mode 则定义了下列数种情况:

   S_IFMT   0170000    文件类型的位遮罩    S_IFSOCK 0140000    套接字    S_IFLNK 0120000     符号连接    S_IFREG 0100000     一般文件    S_IFBLK 0060000     区块装置    S_IFDIR 0040000     目录    S_IFCHR 0020000     字符装置    S_IFIFO 0010000     先进先出​    S_ISUID 04000     文件的(set user-id on execution)位    S_ISGID 02000     文件的(set group-id on execution)位    S_ISVTX 01000     文件的sticky位​    S_IRUSR(S_IREAD) 00400     文件所有者具可读取权限    S_IWUSR(S_IWRITE)00200     文件所有者具可写入权限    S_IXUSR(S_IEXEC) 00100     文件所有者具可执行权限​    S_IRGRP 00040             用户组具可读取权限    S_IWGRP 00020             用户组具可写入权限    S_IXGRP 00010             用户组具可执行权限​    S_IROTH 00004             其他用户具可读取权限    S_IWOTH 00002             其他用户具可写入权限    S_IXOTH 00001             其他用户具可执行权限​    上述的文件类型在POSIX中定义了检查这些类型的宏定义:    S_ISLNK (st_mode)    判断是否为符号连接    S_ISREG (st_mode)    是否为一般文件    S_ISDIR (st_mode)    是否为目录    S_ISCHR (st_mode)    是否为字符装置文件    S_ISBLK (s3e)        是否为先进先出    S_ISSOCK (st_mode)   是否为socket    若一目录具有sticky位(S_ISVTX),则表示在此目录下的文件只能被该文件所有者、此目录所有者或root来删除或改名,在linux中,最典型的就是这个/tmp目录啦。​

st_mode 的结构

st_mode 主要包含了 3 部分信息:

  • 15-12 位保存文件类型

  • 11-9 位保存执行文件时设置的信息

  • 8-0 位保存文件访问权限

转载地址:http://fbzi.baihongyu.com/

你可能感兴趣的文章