fread
的基本用法是检查返回值是否符合预期读取的字节数,以验证您读取了预期内容。保存返回值可以使您处理部分读取。
以下最小化示例每次从给定作为第一个参数的文件(如果没有提供文件,则默认为stdin
)中以16字节为单位读取到buf
中,然后以十六进制格式将每个值输出到stdout
。
#include <stdio.h>
#define BUFSZ 16
int main (int argc, char **argv) {
unsigned char buf[BUFSZ] = {0};
size_t bytes = 0, i, readsz = sizeof buf;
FILE *fp = argc > 1 ? fopen (argv[1], "rb") : stdin;
if (!fp) {
fprintf (stderr, "error: file open failed '%s'.\n", argv[1]);
return 1;
}
while ((bytes = fread (buf, sizeof *buf, readsz, fp)) == readsz) {
for (i = 0; i < readsz; i++)
printf (" 0x%02x", buf[i]);
putchar ('\n');
}
for (i = 0; i < bytes; i++)
printf (" 0x%02x", buf[i]);
putchar ('\n');
if (fp != stdin)
fclose (fp);
return 0;
}
注意: 当使用
fread
函数时,只有当
size
参数为
1
时,才有
bytes == readsz
。返回结果是读取的
items
数量,每个项目仅对于
char
类型值等于
1
。
示例用法/输出
$ echo "A quick brown fox jumps over the lazy dog" | ./bin/fread_write_hex
0x41 0x20 0x71 0x75 0x69 0x63 0x6b 0x20 0x62 0x72 0x6f 0x77 0x6e 0x20 0x66 0x6f
0x78 0x20 0x6a 0x75 0x6d 0x70 0x73 0x20 0x6f 0x76 0x65 0x72 0x20 0x74 0x68 0x65
0x20 0x6c 0x61 0x7a 0x79 0x20 0x64 0x6f 0x67 0x0a
请查看示例,如果您有任何问题,请告诉我。
printf
停止打印的空终止符会发生什么? - Ken Whiteprintf
输出有意义的东西呢? - user253751