st_size为负但没有错误
st_size is negative but there is no error
这是我用来显示文件大小的代码“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
) 的类型,但它不起作用。
该代码非常适合小文件。
非常感谢您的帮助
"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',这很容易做到。
%ld
格式说明符需要类型为(有符号)long
的参数,但 stbuf.st_size
的类型为 off_t
。 off_t
没有格式说明符。相反,您需要转换为可以包含 off_t
范围内的任何值并且您具有格式说明符的类型。例如:
printf("%lld\n", (long long)stbuf.st_size);
甚至更好:
printf("%jd\n", (intmax_t)stbuf.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
) 的类型,但它不起作用。
该代码非常适合小文件。
非常感谢您的帮助
"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',这很容易做到。
%ld
格式说明符需要类型为(有符号)long
的参数,但 stbuf.st_size
的类型为 off_t
。 off_t
没有格式说明符。相反,您需要转换为可以包含 off_t
范围内的任何值并且您具有格式说明符的类型。例如:
printf("%lld\n", (long long)stbuf.st_size);
甚至更好:
printf("%jd\n", (intmax_t)stbuf.st_size);