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

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

具有以下函数签名

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

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

答案1

致电read()可能会导致后台读取的数据多于请求的数据(例如从存储中读取完整块,或提前读取以下块),但是read()其本身绝不返回的数据多于请求的数据 ( count)。如果确实如此,结果很可能是缓冲区溢出,因为buf通常只调整count字节大小。

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

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

Linux 手册页不太明确,但它确实说了

read()尝试阅读取决于数数字节从文件描述符FD 进入缓冲区,开始于缓冲区

(强调是添加的。)

答案2

请注意,如果出现错误,read() 将返回 -1,如果将其视为无符号,则几乎肯定会大于 count。

相关内容