offset参数的类型是off_t,nbytes的类型是size_t,而两者描述的是相同的内容:文件长度。如果我的文件比off_t长但比size_t短呢?如果我异步发送,可能会发生当前文件偏移量比off_t大的情况,但我仍然希望发送更多,因为size_t更大。
off_t总是较低,因为它是有符号的,而size_t是无符号的。
我知道您可以设置nbytes = 0,但是我明确地希望使用一个长度。
发布于 2019-07-11 12:10:18
offset和nbytes参数描述的不是同一件事。相反,它们分别描述从何处开始和在何处结束从文件中复制字节。
如果您的文件大小为131,072字节(128 the ),并且使用offset为16,384和nbytes为32,768,那么sendfile()将从16,384位置复制到文件上的位置49,152,从offset开始,总共有32 the(由nbytes指定)。
如果您使用的offset为114,688,nbytes为32,768,则sendfile()将从114,688位置复制到文件的末尾,位置为131,072,总共为16 and。由于文件比预期的nbytes短,所以sendfile()发送的数据将比请求的少。
如果您使用的offset为147,456,而nbytes为32,768,则sendfile()将发送0字节。如果开始的时间超过了文件的结束,那么就不会有字节要复制,所以它不会发送任何信息。
最后,对于nbytes设置为0有一个特例,它将复制文件的全部内容,因此如果您使用offset为0和nbytes为0,那么sendfile()将为整个文件总共发送131,072字节(128 and )。
https://unix.stackexchange.com/questions/529514
复制相似问题