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;
}