sys/sendfile.h没有找到GCC

sys/sendfile.h not found GCC

本文关键字:GCC sendfile sys      更新时间:2023-10-16

我使用的是Mac OS 10.6.7,

gcc编译器在我买Mac的时候就已经有了。但是当我尝试包含sys/sendfile.h#include<sys/sendfile.h>

抛出错误

sys/sendfile.h: No such file or directory.

但是这个程序在ubuntu GCC编译器中可以正常工作。知道怎么解决这个问题吗?

sendfile()最终是一个内核功能,而不是一个库或编译器功能,并且引用linux手册,"其他Unix系统用不同的语义和原型实现sendfile()。它不应该在可移植程序中使用。"

曾经有一个适用于OSX/Darwin的sendfile手册的链接,但是苹果一直在移动他们的文档,所以你必须自己找到。

实际上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>

根据Linux手册页:

在POSIX.1-2001或其他标准中未指定。

其他UNIX系统用不同的语义和原型实现sendfile()。在可移植程序中不能使用

我不确定OSX,但似乎你必须自己做一点挖掘才能找到它。

您在找sendfile(2)吗?如果是,它不在sys/sendfile.h:

OS X Developer Library说明你应该包括这些:

 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/uio.h>

在OSX上sendfile在socket.h中定义。所以你需要包含socket.h而不是sys/sendfile.h