You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言不使用stat()函数读取文件状态的其他实现方法有哪些?

C语言读取文件状态的其他可用方法

除了stat()外,C语言生态下还有多个适配不同场景的文件状态读取方案,按适用场景分类如下:

  • POSIX标准兼容接口(类Unix/Linux/macOS/Android等平台通用)
    • fstat(int fd, struct stat *buf):入参为已通过open()打开的文件描述符,无需重复做路径解析,效率更高,还能避免路径解析带来的竞态问题,返回的struct stat结构和stat()完全一致。
    • lstat(const char *pathname, struct stat *buf):和stat()的唯一区别是不会自动解引用符号链接,如果你需要获取软链接本身的属性(而非它指向的目标文件属性),必须使用该接口。
    • fstatat(int dirfd, const char *pathname, struct stat *buf, int flags):POSIX.1-2008新增的灵活接口,支持基于已打开的目录文件描述符传入相对路径查询状态,通过flags参数可配置是否解引用符号链接,适合批量处理同目录下文件的场景。
  • Windows平台原生接口
    不依赖POSIX兼容层的Windows原生开发场景下,可以使用Win32 API:
    • GetFileAttributesExW():传入Unicode格式的文件路径,直接获取文件属性信息,返回结果存储在WIN32_FILE_ATTRIBUTE_DATA结构体中。
    • GetFileInformationByHandle():入参为已打开的文件句柄,返回更全的文件状态信息,包含文件唯一索引、创建/修改/访问时间、大小等核心属性。
// lstat使用示例(POSIX环境)
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>

int main(void) {
    struct stat file_stat;
    // 直接获取软链接本身的状态,不会追踪到指向的目标文件
    if (lstat("./test_link", &file_stat) != 0) {
        perror("lstat执行失败");
        return 1;
    }
    printf("软链接自身大小:%ld字节\n", file_stat.st_size);
    printf("软链接最后修改时间:%ld秒\n", file_stat.st_mtime);
    return 0;
}

注意:所有POSIX系列的状态查询接口都需要引入<sys/stat.h>头文件,Windows原生接口需要引入<windows.h>头文件。

内容的提问来源于stack exchange,提问作者Kevin CM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:57:03