写系统调用原型为:
ssize_t write(int fd, const void *buf, size_t count);
count 参数是无符号的,返回值是有符号的。
帮助页面说:
成功时,返回写入的字节数(零表示未写入任何内容)。出错时,返回 -1,并errno
进行适当设置。
但是,它没有说明 count 参数的限制是什么。它仍然没有说明 count 大于时的行为SSIZE_MAX
。
考虑到 write 是一个可用于通用设备/文件/任何东西的系统调用,如果设备支持大于 SSIZE_MAX 的写入操作,则返回类型无法处理写入的实际字节数。
能够传递无符号字节数并返回有符号字节数对我来说没有意义。为什么不只传递一个签名号码?
感觉就像 write 函数的原型有点容易出错,或者至少它在路径上留下了一个可能的漏洞。
有谁知道它的详细信息或我在哪里可以找到这些信息?