【Linux】文件系统之stat函数

1、stat主要函数

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

int stat(const char *path, struct stat *buf);
//在Linux中,可以利用stat()函数来获取一个文件的状态
//这个函数执行成功返回0,失败返回-1
//取得的文件状态存放在buf指针指向的struct stat结构提中
int fstat(int fd, struct stat *buf);
//fstat函数获得已在描述符上打开的文件的有关信息 
int lstat(const char *path, struct stat *buf);
//lstat函数类似于stat,但是当命名的文件是一个符号连接时
// lstat返回该符号连接的有关信息,而不是由该符号连接引用的文件的信息

2、认识stat结构体

struct stat {
    dev_t     st_dev;     /* 文件的设备编号 */
    ino_t     st_ino;     /* inode number */
    mode_t    st_mode;    /* 文件的类型和存取权限 */
    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;    /* 文件字节数 */
    blksize_t st_blksize; /* blocksize for filesystem 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 */
};

3、判断文件各类操作

st_mode是用特征位来表示文件类型的,特征位的定义如下:

S_IFMT 0170000 文件类型的位遮罩
S_IFSOCK 0140000 socket
S_IFLNK 0120000 符号链接(symbolic link)
S_IFREG 0100000 一般文件
S_IFBLK 0060000 区块装置(block device)
S_IFDIR 0040000 目录
S_IFCHR 0020000 字符装置(character device)
S_IFIFO 0010000 先进先出(fifo)
S_ISUID 0004000 文件的(set user-id on execution)位
S_ISGID 0002000 文件的(set group-id on execution)位
S_ISVTX 0001000 文件的sticky位
S_IRWXU 00700 文件所有者的遮罩值(即所有权限值)
S_IRUSR 00400 文件所有者具可读取权限
S_IWUSR 00200 文件所有者具可写入权限
S_IXUSR 00100 文件所有者具可执行权限
S_IRWXG 00070 用户组的遮罩值(即所有权限值)
S_IRGRP 00040 用户组具可读取权限
S_IWGRP 00020 用户组具可写入权限
S_IXGRP 00010 用户组具可执行权限
S_IRWXO 00007 其他用户的遮罩值(即所有权限值)
S_IROTH 00004 其他用户具可读取权限
S_IWOTH 00002 其他用户具可写入权限
S_IXOTH 00001 其他用户具可执行权限

判断文件类型时,用对文件的st_mode的值与上面给出的值相与,再比较。

还有一种简单的方法,利用系统提供好的宏直接比较:

功能
S_ISLINGK(st_mode) 判断是否位符号链接
S_ISREG(st_mode) 是否为一般文件
S_ISDIR(st_mode) 是否为目录
S_ISCHR(st_mode) 是否位字符装置文件
S_ISBLK(s3e) 是否先进先出
S_ISSOCK(st_mode) 是否为socket

猜你喜欢

转载自blog.csdn.net/sofia_m/article/details/81169732
今日推荐