关于fread读不满一块和读不满count的返回值
#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
浙公网安备 33010602011771号