标准的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的数据块.
一般来说,它可以读取尽可能多的可用字节buf。实际上,底层设备驱动程序(无论是文件系统、网络还是管道)返回的内容将少于您想要的,以防没有更多可用的内容。
因此,特定行为read取决于内核中的底层驱动程序。
这就是为什么始终检查返回值read并检查实际读取的字节很重要。
| 归档时间: |
|
| 查看次数: |
9051 次 |
| 最近记录: |