我用的是Mac OS 10.6.7,gcc编译器在我买Mac的时候就已经有了。但是当我尝试包含sys/sendfile. h #include<sys/sendfile.h>时,它抛出一个错误
#include<sys/sendfile.h>
sys/sendfile.h: No such file or directory.
但是这个程序在ubuntu GCC编译器中工作正常。有办法解决吗
qgzx9mmu1#
sendfile()最终是一个内核功能,而不是一个库或编译器功能,引用Linux手册页,“其他Unix系统用不同的语义和原型实现sendfile()。它不应该用于可移植程序。”这里曾经有一个指向sendfile的适用OSX/达尔文手册页的链接,但是苹果一直在移动他们的文档,所以你必须自己找到。Linux手册页的警告确实是准确的-原型是不同的:OSX:
int sendfile(int fd, int s, off_t offset, off_t *len, struct sf_hdtr *hdtr, int flags);
Linux:
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
所以你要重写一些东西。osx包含在手册页上,但为了完整起见:
#include <sys/types.h> #include <sys/socket.h> #include <sys/uio.h>
hsgswve42#
根据Linux manual page:POSIX.1-2001或其他标准中未指定。其他UNIX系统用不同的语义和原型实现sendfile()。它不应该在可移植程序中使用。我不确定OSX,但似乎你必须做一点挖掘自己找到它。
6rvt4ljy3#
你在找sendfile(2)吗?如果是这样,它不在sys/sendfile.h中:OS X Developer Library指出,您应该包括以下内容:
sendfile(2)
sys/sendfile.h
ua4mk5z44#
在OSX上,sendfile在socket. h中定义。因此,您需要包含socket. h而不是sys/sendfile. h
4条答案
按热度按时间qgzx9mmu1#
sendfile()最终是一个内核功能,而不是一个库或编译器功能,引用Linux手册页,“其他Unix系统用不同的语义和原型实现sendfile()。它不应该用于可移植程序。”
这里曾经有一个指向sendfile的适用OSX/达尔文手册页的链接,但是苹果一直在移动他们的文档,所以你必须自己找到。
Linux手册页的警告确实是准确的-原型是不同的:
OSX:
Linux:
所以你要重写一些东西。
osx包含在手册页上,但为了完整起见:
hsgswve42#
根据Linux manual page:
POSIX.1-2001或其他标准中未指定。
其他UNIX系统用不同的语义和原型实现sendfile()。它不应该在可移植程序中使用。
我不确定OSX,但似乎你必须做一点挖掘自己找到它。
6rvt4ljy3#
你在找
sendfile(2)
吗?如果是这样,它不在sys/sendfile.h
中:OS X Developer Library指出,您应该包括以下内容:
ua4mk5z44#
在OSX上,sendfile在socket. h中定义。因此,您需要包含socket. h而不是sys/sendfile. h