写系统调用原型是:
ssize_t write(int fd, const void *buf, size_t count);
count参数是无符号的,返回值是有符号的。
帮助页面显示:
成功时,返回写入的字节数(零表示没有写入)。
出错时,返回-1,并正确设置errno
。
但是,它没有说明count参数的限制是什么。
当计数大于SSIZE_MAX
时,它仍然没有说出行为。
考虑write是一个系统调用,可用于通用设备/文件/无论如何,如果设备支持大于SSIZE_MAX的写操作,则返回类型无法处理写入的实际字节数。
对我来说没有意义的是能够传递无符号数量的字节并因此返回有符号数量的字节。为什么不通过签名号码?
感觉就像写函数的原型一样容易出错,或者至少会在路径中留下一个可能的漏洞。
有谁知道有关它的详细信息或在哪里可以找到这些信息?
答案 0 :(得分:2)
我认为没有硬性限制,这取决于fd
指向的内容。例如,如果它是文件系统上的文件,那么如果超过“最大文件大小限制”,文件系统驱动程序将会阻塞,返回EFBIG错误:
EFBIG 尝试编写超出实施的文件 - 定义了最大文件大小或进程文件大小限制。
答案 1 :(得分:1)
如果nbyte的值大于 {SSIZE_MAX} ,则结果是实现定义的。
来源:http://pubs.opengroup.org/onlinepubs/009695399/functions/write.html
答案 2 :(得分:0)
我想请记住,系统会分配您为该函数提供的字节数。但我不确定。也许你会尝试size_t和ssize_t手册页。