C语言 404 Not Found Not Found

roejwanj  于 2023-10-16  发布在  其他
关注(0)|答案(4)|浏览(89)

我用的是Mac OS 10.6.7,
gcc编译器在我买Mac的时候就已经有了。但是当我尝试包含sys/sendfile. h #include<sys/sendfile.h>时,
它抛出一个错误

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

但是这个程序在ubuntu GCC编译器中工作正常。有办法解决吗

qgzx9mmu

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>
hsgswve4

hsgswve42#

根据Linux manual page
POSIX.1-2001或其他标准中未指定。
其他UNIX系统用不同的语义和原型实现sendfile()。它不应该在可移植程序中使用。
我不确定OSX,但似乎你必须做一点挖掘自己找到它。

6rvt4ljy

6rvt4ljy3#

你在找sendfile(2)吗?如果是这样,它不在sys/sendfile.h中:
OS X Developer Library指出,您应该包括以下内容:

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

ua4mk5z44#

在OSX上,sendfile在socket. h中定义。因此,您需要包含socket. h而不是sys/sendfile. h

相关问题