stat()
函数是 Linux/Unix 系统中用于获取文件信息的一个系统调用。它的完整原型如下:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat(const char *path, struct stat *buf);
其中各个参数的含义如下:
path
: 要获取信息的文件路径。可以是文件名、目录名或符号链接。buf
: 用于存放文件信息的结构体指针。这个结构体的定义如下
struct stat {
dev_t st_dev; /* 包含文件的设备 ID */
ino_t st_ino; /* Inode 号码 */
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; /* 分配的 512 字节块数 */
time_t st_atime; /* 上次访问时间 */
time_t st_mtime; /* 上次修改时间 */
time_t st_ctime; /* 上次状态改变时间 */
};
stat()
函数的返回值代表执行结果:
- 返回值为 0 时表示成功:
- 这意味着
stat()
函数成功获取了文件的相关信息,并将其存储到了buf
结构体中。
- 这意味着
- 返回值为 -1 时表示失败:
- 这种情况下,表示获取文件信息失败。具体的错误原因可以通过检查
errno
变量来确定。 - 常见的错误原因有:
ENOENT
: 文件或目录不存在EACCES
: 没有访问文件的权限EFAULT
:buf
指针无效ELOOP
: 遇到太多个符号链接ENAMETOOLONG
: 文件路径名太长
- 这种情况下,表示获取文件信息失败。具体的错误原因可以通过检查
总的来说, stat()
函数的返回值 0 表示成功, -1 表示失败。如果失败,需要检查 errno
变量来确定具体的错误原因,以便采取相应的错误处理措施。
这种返回值机制是 Unix/Linux 系统调用的一个常见模式。合理处理系统调用的返回值和错误码是编写健壮系统程序的关键。