FreeBSD i386平台大文件sendfile相关:是否存在sendfile64?
FreeBSD i386上的sendfile64系统调用情况
直接给结论:在FreeBSD i386平台上,不存在独立的sendfile64系统调用,这也是你在FreeBSD系统调用参考文档里找不到它的原因。
为什么不需要sendfile64?
FreeBSD的设计思路和Linux有明显区别:
- Linux在32位架构下,早期系统调用使用32位偏移量,无法处理超过2GB的大文件,因此衍生出
sendfile64这类带64后缀的系统调用,专门用来支持64位偏移的大文件操作。 - 而FreeBSD的原生
sendfile系统调用从设计之初就支持64位偏移。在i386平台上,只要编译时启用了大文件支持(这是FreeBSD的默认配置,对应_FILE_OFFSET_BITS=64宏),off_t类型就会是64位,sendfile的参数offset和sbytes都能处理大文件的偏移量,完全覆盖了Linux中sendfile64的功能。
验证方式
你可以在系统里执行man 2 sendfile查看手册页,会看到它的函数原型是:
ssize_t sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags);
其中off_t在i386系统中默认就是64位类型,所以原生sendfile就能完美处理大文件传输,不需要额外的64位版本系统调用。
内容的提问来源于stack exchange,提问作者kola
相关产品推荐
相关产品推荐

