stat()系统调用用于获取文件属性和信息。它可以用于获取文件大小、创建时间、访问时间、修改时间、权限等信息。 语法格式为:

int stat(const char *pathname, struct stat *statbuf);

stat()方法参数包含:

  • pathname:要获取信息的文件路径
  • statbuf:用于接收文件信息的stat结构体指针 stat结构体定义在<sys/stat.h>头文件中,包含如下成员:
  • st_dev:文件系统ID
  • st_ino:节点ID
  • st_mode:文件类型和权限
  • st_nlink:硬链接数
  • st_uid:用户ID
  • st_gid:组ID
  • st_rdev:设备ID(若是特殊文件)
  • st_size:文件大小(字节)
  • st_blksize:块大小
  • st_blocks:块数
  • st_atime:最近访问时间
  • st_mtime:最近修改时间
  • st_ctime:文件创建时间 stat()系统调用会将获取到的文件信息填充到stat结构体中,并通过statbuf参数返回给调用者。 常见用法: 获取文件大小:
struct stat statbuf;
stat("file.txt", &statbuf);
int size = statbuf.st_size;

检查文件类型:

struct stat statbuf;
stat("file.txt", &statbuf);
if (S_ISREG(statbuf.st_mode)) {  // 普通文件
...
} else if (S_ISDIR(statbuf.st_mode)) { // 目录
...
}

获取文件最近访问时间:

struct stat statbuf;
stat("file.txt", &statbuf);
time_t time = statbuf.st_atime;
所以,通过stat()系统调用,你可以获取文件:
  • 类型(普通文件、目录、设备文件等)
  • 权限
  • 大小
  • 块信息
  • 时间(访问时间、修改时间、创建时间)
  • 用户与组信息
  • 设备ID
  • 节点ID