我正在尝试在 Cygwin 上编译一些需要 sendfile.h 的 C 代码。当我尝试编译时,它给了我
fatal error: sys/sendfile.h: No such file or directory
compilation terminated.
我该如何解决这个问题?我必须迁移到 linux 平台吗?我在 Cygwin 上安装了 gcc4.5。
我正在尝试在 Cygwin 上编译一些需要 sendfile.h 的 C 代码。当我尝试编译时,它给了我
fatal error: sys/sendfile.h: No such file or directory
compilation terminated.
我该如何解决这个问题?我必须迁移到 linux 平台吗?我在 Cygwin 上安装了 gcc4.5。
就像提到的评论一样,sendfile
不是 POSIX,但是,来自
sendfile(2)的手册页
sendfile() 在一个文件描述符和另一个文件描述符之间复制数据。因为这种复制是在内核中完成的,所以 sendfile() 比 read(2) 和 write(2) 的组合更有效,后者需要在用户空间和用户空间之间传输数据。
这意味着它基本上是 aread()
后跟 a write()
,因此自己实现它会相对容易。
我删除了
#include <sys/sendfile.h>
并重写
sendfile(write_fd, read_fd, &offset, stat_buf.st_size);
至
read(read_fd, &offset, stat_buf.st_size);
write(write_fd, &offset, stat_buf.st_size);
它工作正常。谢谢。