1

我正在尝试在 Cygwin 上编译一些需要 sendfile.h 的 C 代码。当我尝试编译时,它给了我

fatal error: sys/sendfile.h: No such file or directory
compilation terminated.

我该如何解决这个问题?我必须迁移到 linux 平台吗?我在 Cygwin 上安装了 gcc4.5。

4

2 回答 2

2

就像提到的评论一样,sendfile不是 POSIX,但是,来自 sendfile(2)的手册页

sendfile() 在一个文件描述符和另一个文件描述符之间复制数据。因为这种复制是在内核中完成的,所以 sendfile() 比 read(2) 和 write(2) 的组合更有效,后者需要在用户空间和用户空间之间传输数据。

这意味着它基本上是 aread()后跟 a write(),因此自己实现它会相对容易。

于 2012-11-01T18:03:09.930 回答
0

我删除了

#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);

它工作正常。谢谢。

于 2019-08-04T13:43:40.090 回答