首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'unistd.h‘中'read’函数的读取限制是多少?

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

Stack Overflow用户
提问于 2011-09-08 22:43:20
回答 3查看 11.4K关注 0票数 6

标准unix C具有以下功能:

代码语言:javascript
复制
ssize_t read(int fd, void *buf, size_t count);

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-08 22:47:37

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

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

这就是为什么总是要检查read的返回值并检查实际读取的字节数的原因。

票数 2
EN

Stack Overflow用户

发布于 2019-10-01 22:46:32

引用自IEEE标准1003.1 (也称为POSIX.1)

如果nbyte值大于{SSIZE_MAX},则结果由实现定义。

所以你必须在你的目标平台上检查man 2 read。例如,FreeBSD man在错误部分中说:

EINVAL值n字节大于INT_MAX。

票数 2
EN

Stack Overflow用户

发布于 2011-09-08 22:45:05

read()接受一个打开的文件描述符、一个缓冲区的地址和一个字节数。它尝试从描述符所描述的文件中将计数字节读入缓冲区。重要的是要确保buf指向至少计数字节的存储!

它可以读取你的缓冲区所能容纳的内容,限制是SSIZE_MAX,也是你的硬件的限制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7349877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档