我使用 fwrite 将 100,000 个字符的缓冲区写入文件,但 fwrite 的返回值仅为 4096。
char buffer [100000];
memset(buffer,0x00,100000);
FILE *f = fopen("<path>","ab+");
if(f ==NULL)
{
return;
}
int ret =fwrite(buffer,1,100000,f);
printf("ret = %d",ret);
ret = 4096
为什么这段代码只写 4096 字节而不是 100,000 字节?
这是Linux嵌入式系统
从手册页:
返回值
[...]如果发生错误,或者文件末尾 达到,则返回值为短项目计数(或零(。
在这种情况下,您应该使用ferror(f)
来查看文件句柄是否处于错误状态。此外,您可以在呼叫前将errno
清零,并打印错误消息,perror
:
errno = 0;
int ret = fwrite(buffer, 1, 100000, f);
if (ret != 100000) {
printf("Stream error indication %d", ferror(f));
perror("Short item count");
}
任何write
调用的最大长度由SSIZE_MAX
定义,可以在unistd.h
中找到。
这适用于每个符合 POSIX 标准的系统。 对于不同的实现,SSIZE_MAX
可能有所不同。
请尝试以下示例以确定系统上的最大写入长度:
#include <stdio.h>
#include <limits.h>
int main(void) {
printf("SSIZE_MAX : %ldn", SSIZE_MAX);
return 0;
}
它在我的机器上打印SSIZE_MAX : 9223372036854775807
。
编辑:您也可以尝试找到limits.h
文件,但编译可能是更简单的选择