我使用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嵌入式系统。
发布于 2020-05-12 04:49:43
From man pages
返回值
..。如果发生错误或到达文件末尾,则返回值为短项目计数(或零)。
在这种情况下,您应该使用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");
}
发布于 2020-05-12 04:38:03
任何write
调用的最大长度都由SSIZE_MAX
定义,可以在unistd.h
中找到。
这适用于每个符合POSIX的系统。对于不同的实现,SSIZE_MAX
可能有所不同。
尝试以下示例以确定系统上的最大写入长度:
#include <stdio.h>
#include <limits.h>
int main(void) {
printf("SSIZE_MAX : %ld\n", SSIZE_MAX);
return 0;
}
它会在我的机器上打印SSIZE_MAX : 9223372036854775807
。
编辑:您也可以尝试查找limits.h
文件,但编译可能是更简单的选择
https://stackoverflow.com/questions/61735956
复制相似问题