C语言read函数读入字节数问题

在linux环境下,使用open,read读取一个txt文件,出现了一些奇怪的地方。
1.文件是UTF-8编码 全英文,无中文 真实的文本文件是这样的:
图片说明

  1. 设置了一个char buf[20],fd是一个文件标示符。 3.已经得知sizeof(char)=1 sizeof(buf)=20

3.read(fd,buf,1);
结果显示:@

这里读入一个字节的话,为什么是这个东西?
4.read(fd,buf,2);
结果显示:bf
这里为什么又正常了?
5.read 3,4,5,6,7 个字节都是正常的
6.read(fd,buf,8);
再次错误:
图片说明
又乱码了
7.read(fd,buf,9);
结果是:
8.read(fd,buf,10);
正常
9.read(fd,buf,16);
再次错误:
图片说明
10.read(fd,buf,17);
还是乱码:
图片说明
11.read(fd,buf,18);
这次还是乱码,但是后面的g显示出来了。
图片说明
12.read(fd,buf,19);
还是乱码,但是后面的r显示出来了。
图片说明
13.read(fd,buf,20);
还是乱码,但是后面的e显示出来了。
图片说明

代码如下:
图片说明

图片说明

https://www.cnblogs.com/dspace/p/4257317.html

把你代码贴出来,才能判断;

图片说明