'unistd.h'中'read'函数的读取限制是多少?

jon*_*ham 4 unix io file

标准的unix C具有以下功能:

ssize_t read(int fd, void *buf, size_t count);
Run Code Online (Sandbox Code Playgroud)

但是这个'read'函数可以读取1次的最大字节数是多少?

Lig*_*ica 11

来自man read(2):

read() 尝试从buf开始读取从文件描述符fd到缓冲区的字节数.

如果count为零,则read()返回零并且没有其他结果.如果count大于SSIZE_MAX,则结果未指定.

SSIZE_MAX取决于您的系统,但通常它类似于最大值signed long,通常是2 31(32位系统)或2 63(64位系统).

2 31个字节是2千兆字节,所以你可能很安全; 实际上,实际的设备驱动程序/缓冲区/网络I/O永远不会一次性为您提供2 GB的数据块.


Bla*_*iev 2

一般来说,它可以读取尽可能多的可用字节buf。实际上,底层设备驱动程序(无论是文件系统、网络还是管道)返回的内容将少于您想要的,以防没有更多可用的内容。

因此,特定行为read取决于内核中的底层驱动程序。

这就是为什么始终检查返回值read并检查实际读取的字节很重要。