gpt4 book ai didi

c - write(2) 总是写小于或等于 SSIZE_MAX 吗?

转载 作者:太空狗 更新时间:2023-10-29 16:30:38 29 4
gpt4 key购买 nike

write(2) 的函数签名是 ssize_t write(int fd, const void *buf, size_t count)。通常,size_t 的最大值大于ssize_t 的最大值。这是否意味着 write 实际可以写入的数据量实际上是 SSIZE_MAX 而不是 SIZE_MAX?如果不是这种情况,当写入的字节数大于 SSIZE_MAX 溢出时会发生什么情况?

我基本上想知道 write 写入的数据量是否受 SSIZE_MAXSIZE_MAX 限制。

最佳答案

ssize_t 类型由 POSIX 定义为签名类型,能够存储至少 32767 (_POSIX_SSIZE_MAX),没有其他保证。所以它的最大值可以小于size_t的最大值。

ssize_t的 POSIX 定义:

ssize_t

Used for a count of bytes or an error indication.

因此您请求写入的字节数可能大于 ssize_t 可以容纳的字节数。在这种情况下,POSIX 将其留给实现。

来自 write()的 POSIX 规范:

ssize_t write(int fildes, const void *buf, size_t nbyte);

If the value of nbyte is greater than {SSIZE_MAX}, the result is implementation-defined.

关于c - write(2) 总是写小于或等于 SSIZE_MAX 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29722999/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com