C语言 Fwrite 仅写入 4096 而不是 100,000 字节



我使用 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文件,但编译可能是更简单的选择

最新更新