st_size 为负但没有错误

问题描述

这是我用来显示文件“myfile_name”大小的代码

struct stat stbuf;
if (stat("myfile_name",&stbuf)<0) {
    fprintf(stderr,"\nError : %s \nErrno : %s","stat_big file",strerror(errno));
}

printf("ST_SIZE : %ld",stbuf.st_size);

st_size = -1509949440(字节),当文件大小为 2,785,017,856 字节(2.5)

我已经搜索了很多小时的解决方案,我试图添加这一行:#define _FILE_OFFSET_BITS 64 但它没有用。 Errno 告诉我没有错误。显然,对于 stat 函数,没有溢出。在另一个问题中,由于 %ld (stbuf.st_size) 的类型,答案是使用 off_t 但它不起作用。

代码可以完美处理小文件。

非常感谢您的帮助

解决方法

%ld 格式说明符需要类型为(有符号)long 的参数,但 stbuf.st_size 的类型为 off_toff_t 没有格式说明符。相反,您需要转换为可以包含 off_t 范围内的任何值并且您有格式说明符的类型。例如:

printf("%lld\n",(long long)stbuf.st_size);

甚至更好:

printf("%jd\n",(intmax_t)stbuf.st_size);
,

“man 2 stat”给出调用和“struct stat”定义。

它还告诉您要检查的头文件(unistd.h、sys/types.h、sys/stat.h)

so "off_t st_size" -> 你可以找到 "off_t" 的定义。

看看,然后确保您的 printf 格式说明符匹配。例如如果“off_t”是“unsigned long”,您可能需要“%lu”,这很容易。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...