read() 返回值可以超过计数值吗?

pac*_*fic 6 linux c read

使用以下函数签名

ssize_t read(int fd, void *buf, size_t count);

虽然我确实根据手册页了解,在成功案例中,返回值可能小于count,但返回值是否可以在任何情况下超过count

Ste*_*itt 18

调用read()可能会导致在后台读取的数据多于请求的数据(例如,从存储中读取一个完整的块,或提前读取后面的块),但read()它本身永远不会返回比请求更多的数据 ( count)。如果是这样,结果很可能是缓冲区溢出,因为buf通常仅针对count字节进行大小调整。

POSIX(见上面的链接)明确指定了这个限制:

成功完成后,当nbyte大于 0 时,read()将标记更新文件的最后一个数据访问时间戳,并返回读取的字节数。这个数字永远不会大于nbyte

Linux 手册页不是很明确,但它确实说

read()试图读取计数字节从文件描述符FD 到缓冲开始BUF

(加了重点。)