stat()/lstat()的使用

stat()函数和lstat()函数都是用于获取文件或目录的信息的函数,它们可以返回包含文件或目录的各种属性的结构体。

这里是关于这两个函数的使用方法的简要说明:

stat()函数

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

int stat(const char *path, struct stat *buf);

path:要获取信息的文件或目录的路径。
buf:用于存储被获取信息的结构体。stat结构体的定义如下:

struct stat {
    
    
    dev_t     st_dev;         // 设备ID
    ino_t     st_ino;         // i-node号
    mode_t    st_mode;        // 文件类型和权限
    nlink_t   st_nlink;       // 连接数
    uid_t     st_uid;         // 用户ID
    gid_t     st_gid;         // 组ID
    dev_t     st_rdev;        // 特殊文件设备ID
    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;       // 最后更改时间
};

返回值:调用成功返回0,失败返回-1,并设置errno来表示错误。

lstat()函数

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

int lstat(const char *path, struct stat *buf);

lstat()函数与stat()函数的功能类似,不同之处在于lstat()函数不会跟随符号链接进行解析,而是返回符号链接本身的信息。其他参数和返回值与stat()函数相同

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

int main() {
    
    
    const char* filePath = "/path/to/file.txt";
    struct stat fileInfo;

    if (stat(filePath, &fileInfo) == 0) {
    
    
        std::cout << "File size: " << fileInfo.st_size << " bytes" << std::endl;
        // 可以使用其他的fileInfo成员获取更多文件信息
    } else {
    
    
        std::cerr << "Failed to get file information." << std::endl;
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/neuzhangno/article/details/132452161