ngx_fd_info
定义 在src\os\unix\ngx_files.h
c
#define ngx_fd_info(fd, sb) fstat(fd, sb)
fstat()
是 POSIX 标准中定义的一个系统调用函数,用于获取与已打开文件描述符 关联的文件状态信息。它通过填充一个 struct stat
结构体来返回文件的元数据(如大小、权限、时间戳等)。以下是详细解释:
函数原型
c
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int fstat(int fd, struct stat *sb);
参数说明
-
fd
(文件描述符)一个已打开的文件描述符(通过
open()
,creat()
,pipe()
等函数获得)。
注意 :fstat()
不接受文件路径,而是直接操作已打开的文件描述符。 -
sb
(状态缓冲区)指向
struct stat
类型的指针,用于存储获取到的文件状态信息。
返回值
- 成功 :返回
0
。 - 失败 :返回
-1
,并设置全局变量errno
表示错误原因。
struct stat
结构体
fstat()
的核心是填充 struct stat
结构体,其典型定义如下(可能因系统不同略有差异):
c
struct stat {
dev_t st_dev; // 文件所在设备的 ID
ino_t st_ino; // 文件的 inode 号
mode_t st_mode; // 文件类型和权限(如 S_IFREG、S_IRUSR 等)
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; // 最后状态变化时间(元数据修改)
};
功能与用途
fstat()
的主要用途是获取已打开文件的元数据,适用于以下场景:
- 检查文件类型(普通文件、目录、符号链接、设备文件等)。
- 获取文件大小(
st_size
)。 - 检查文件权限(
st_mode
中的S_IRUSR
,S_IWGRP
等)。 - 判断文件是否为符号链接(需配合
lstat()
使用)。 - 获取文件的时间戳(访问时间、修改时间等)。