sendfile.hを必要とするCygwinでいくつかのCコードをコンパイルしようとしています。コンパイルしようとすると、
fatal error: sys/sendfile.h: No such file or directory
compilation terminated.
どうすればこれを解決できますか?Linuxプラットフォームに移行する必要がありますか?Cygwinにgcc4.5をインストールしています。
sendfile.hを必要とするCygwinでいくつかのCコードをコンパイルしようとしています。コンパイルしようとすると、
fatal error: sys/sendfile.h: No such file or directory
compilation terminated.
どうすればこれを解決できますか?Linuxプラットフォームに移行する必要がありますか?Cygwinにgcc4.5をインストールしています。
言及されたコメントのように、しかし、 sendfile(2)sendfile
のmanページからのPOSIXではありません
sendfile()は、あるファイル記述子と別のファイル記述子の間でデータをコピーします。このコピーはカーネル内で行われるため、sendfile()は、ユーザースペースとの間でデータを転送する必要があるread(2)とwrite(2)の組み合わせよりも効率的です。
つまり、基本的にはread()
が後に続く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);
そしてそれはうまくいきます。ありがとう。