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

aarch64平台stat函数返回st_size异常(恒为4096)求助

aarch64平台下stat/fstat获取文件大小始终返回4096的问题排查

问题现象

在aarch64架构机器上,调用stat或fstat函数获取文件大小时,st_size字段始终返回4096,但实际文件大小仅为2字节:

  • 测试代码:
#include <iostream>
#include <sys/stat.h>
using namespace std;

int main()
{
        struct stat st;

        cout << "stat call "<< stat("a.txt", &st)<< endl;
        cout << "./a.txt File size " << st.st_size << endl;
        FILE *fp = fopen("a.txt", "rb");
        struct stat finfo;
        if (fstat(fileno(fp), &finfo)) cout << "fail"<< endl;
        cout << "./a.txt File ftst size " << finfo.st_size << endl;
        return 0;
}
  • 程序输出:
stat call 0
./a.txt File size 4096
./a.txt File ftst size 4096
  • 系统工具显示文件实际大小:
root@sv3aggr005:/home/akumar/extract# ll a.txt
-rw-r--r-- 1 root root 2 Apr 25 09:08 a.txt

root@sv3aggr005:/home/akumar/extract# stat a.txt
  File: a.txt
  Size: 2               Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 1742602     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

GDB调试确认,调用stat后st_size被设置为4096,与预期的2不符。

可能原因及解决方法

1. 编译模式不匹配(32位vs64位)

aarch64是64位架构,若编译时强制使用32位模式(比如添加-m32参数),会导致struct stat的字段偏移错误,st_size读取到的是IO Block等其他字段的值。

  • 解决:检查编译命令,移除-m32等32位编译选项,确保以64位模式编译:
    g++ -o stat_test stat_test.cpp
    

2. 头文件冲突或未正确包含

若代码中自定义了struct stat结构体,或未正确包含系统<sys/stat.h>头文件,会使用错误的结构体定义,进而读取错误字段值。

  • 解决:
    • 确保代码顶部正确包含<sys/stat.h>,且无自定义struct stat。
    • 编译时添加-Wall参数,排查头文件相关警告:
      g++ -Wall -o stat_test stat_test.cpp
      

3. off_t类型输出兼容问题

st_size的类型是off_t,若编译器对off_t的处理与cout输出逻辑不兼容(比如off_t为64位类型,但cout默认按32位输出),可能导致数值显示错误。

  • 解决:将st_size显式转换为64位整数后输出:
    cout << "./a.txt File size " << static_cast<long long>(st.st_size) << endl;
    

4. 编译器或系统库bug

旧版本GCC或glibc在aarch64平台上可能存在stat结构体处理bug,导致字段读取错误。

  • 解决:
    • 更新编译器至最新稳定版本(如GCC 9及以上)。
    • 检查并更新系统glibc版本,确保适配aarch64架构。

验证建议

先通过系统stat命令确认文件元数据正常,再逐步排查编译选项、头文件和类型转换问题,前两类原因是此类问题的常见诱因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:43:14