惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
博客园 - Franky
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell
阮一峰的网络日志
阮一峰的网络日志
量子位
雷峰网
雷峰网
宝玉的分享
宝玉的分享
V
Visual Studio Blog
博客园_首页
小众软件
小众软件
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
S
SegmentFault 最新的问题
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
WordPress大学
WordPress大学

博客园 - 邗影

TOF传感器 opengl渲染YUV的波浪百叶窗效果 3D融合场景demo 传感器 关于音频PA结构腔体 球面渲染 关于linux和shi脚本常用的通配符 如何去掉merge UBI的覆盖写和擦除 DTSI 多个模块共用同一个 GPIO 引脚冲突 问题汇总 debug比release程序启动的快 关于CPU占用优先级的调整 关于蜂鸣器发声 麦序与声源定位 关于squashfs压缩挂载 软连接生成 线程退出未定义行为 linux文件查找 C语言弱函数 数据传输报错port unreachable D3D11绘制三角形 关于延迟测试 v4l2检测 关于数据库的性能 流媒体小记包含一些面试问题 v4l2视频采集 流媒体ZLM配置vscode远程开发 关于SPS中的帧率问题 Linux编译问题 SSl冲突问题
关于fread读不满一块和读不满count的返回值
邗影 · 2026-06-02 · via 博客园 - 邗影
#include <iostream>
#include <string>
#include <cstdint>
#include <cstring>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static void make_test_file(const char* path)
{
    FILE* fp = fopen(path, "wb");
    if (!fp) {
        perror("fopen write");
        exit(1);
    }

    // 写 700 字节,方便演示“512 字节整块 + 剩余 188 字节”
    for (int i = 0; i < 300; i++) {
        unsigned char c = (unsigned char)(i & 0xFF);
        fwrite(&c, 1, 1, fp);
    }

    fclose(fp);
}

static void demo_size_512_count_1(const char* path)
{
    unsigned char buf[512];
    FILE* fp = fopen(path, "rb");
    if (!fp) {
        perror("fopen rb");
        exit(1);
    }

    size_t ret1 = fread(buf, 512, 1, fp);
    printf("[size=512,count=1] first read ret=%zu\n", ret1);

    size_t ret2 = fread(buf, 512, 1, fp);
    printf("[size=512,count=1] second read ret=%zu, feof=%d, ferror=%d\n",
        ret2, feof(fp), ferror(fp));

    fclose(fp);
}

static void demo_size_1_count_512(const char* path)
{
    unsigned char buf[512];
    FILE* fp = fopen(path, "rb");
    if (!fp) {
        perror("fopen rb");
        exit(1);
    }

    size_t ret1 = fread(buf, 1, 512, fp);
    printf("[size=1,count=512] first read ret=%zu\n", ret1);

    size_t ret2 = fread(buf, 1, 512, fp);
    printf("[size=1,count=512] second read ret=%zu, feof=%d, ferror=%d\n",
        ret2, feof(fp), ferror(fp));

    fclose(fp);
}

int main(void)
{
    const char* path = "test.bin";

    make_test_file(path);

    demo_size_512_count_1(path);
    demo_size_1_count_512(path);

    return 0;
}

msvc windows 结果

[size=512,count=1] first read ret=0
[size=512,count=1] second read ret=0, feof=1, ferror=0
[size=1,count=512] first read ret=300
[size=1,count=512] second read ret=0, feof=1, ferror=0

X86结果:

[size=512,count=1] first read ret=0
[size=512,count=1] second read ret=0, feof=1, ferror=0
[size=1,count=512] first read ret=300
[size=1,count=512] second read ret=0, feof=1, ferror=0