首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Fwrite仅写入4096字节,而不是100,000字节

Fwrite仅写入4096字节,而不是100,000字节
EN

Stack Overflow用户
提问于 2020-05-12 01:48:24
回答 2查看 296关注 0票数 2

我使用fwrite将100,000个字符的缓冲区写入文件,但fwrite的返回值仅为4096。

代码语言:javascript
运行
复制
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嵌入式系统。

EN

回答 2

Stack Overflow用户

发布于 2020-05-12 04:49:43

From man pages

返回值

..。如果发生错误或到达文件末尾,则返回值为短项目计数(或零)。

在这种情况下,您应该使用ferror(f)来查看文件句柄是否处于错误状态。此外,您还可以在调用之前将errno置零,并使用perror打印错误消息

代码语言:javascript
运行
复制
errno = 0;
int ret = fwrite(buffer, 1, 100000, f);
if (ret != 100000) {
    printf("Stream error indication %d", ferror(f));
    perror("Short item count");
}
票数 1
EN

Stack Overflow用户

发布于 2020-05-12 04:38:03

任何write调用的最大长度都由SSIZE_MAX定义,可以在unistd.h中找到。

这适用于每个符合POSIX的系统。对于不同的实现,SSIZE_MAX可能有所不同。

尝试以下示例以确定系统上的最大写入长度:

代码语言:javascript
运行
复制
#include <stdio.h>
#include <limits.h>

int main(void) {
  printf("SSIZE_MAX : %ld\n", SSIZE_MAX);
  return 0;
}

它会在我的机器上打印SSIZE_MAX : 9223372036854775807

编辑:您也可以尝试查找limits.h文件,但编译可能是更简单的选择

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61735956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档