/* NetBSD hat kein sendfile() also mmaped oder read-write*/ /* linux ab 2.4 haben sendfile fuer >= 2.6 sendfile funktioniert nur fuer socket */ /* freebsd ab 3.0 haben sendfile */ /* solaris ab 8.0 haben sendfilev */ /* windows NT hat TransmitFile */ /* MacOS 10.5 haben sendfile */ #include #ifdef MADV_SEQUENTIAL #define HAVE_MADVISE 1 #else #define MADV_SEQUENTIAL 0 #define MADV_WILLNEED 0 #define HAVE_MADVISE 0 #endif #ifdef __CYGWIN__ #define HAVE_MADVISE 0 #endif #ifdef __linux #include #include #include #include #include #include double sendfile_implementation(int src,int dst,double offset,size_t to_send); #define HAVE_SENDFILE 1 #define HAVE_MMAP 1 #define USE_LINUX_IMPL #define _XOPEN_SOURCE 600 #if defined(POSIX_FADV_SEQUENTIAL) && defined(POSIX_FADV_NOREUSE) #define HAVE_POSIX_FADVISE #endif #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) #include #include #include double sendfile_implementation(int src,int dst,double offset,size_t to_send); #define USE_BSD_IMPL #define HAVE_MMAP 1 #if (defined(__FreeBSD__) && (__FreeBSD__ >= 3)) || defined(__DragonFly__) #define HAVE_SENDFILE 1 #include #else #define HAVE_SENDFILE 0 #endif #elif (defined(__APPLE__) && defined(__MACH__)) #include #include #include #include double sendfile_implementation(int src,int dst,double offset,size_t to_send); #define HAVE_MMAP 1 /* Not foolproof but does stop compilation when < MacOS 10.5 * Should also state that the MIN_ALLOWED is 10.5 but that requires * compiler option setting. */ #include #if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_4 #define HAVE_SENDFILE 1 #define USE_DARWIN_IMPL #else #define HAVE_SENDFILE 0 #endif #elif defined(sun) || defined(__sun) double sendfile_implementation(int src,int dst,double offset,size_t to_send); #ifdef __SunOS_5_8 #define HAVE_SENDFILE 1 #define HAVE_MMAP 1 #define USE_SOLARIS_IMPL #include #include #else #define HAVE_SENDFILE 0 #endif #elif defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__) #define MADV_SEQUENTIAL 0 #define HAVE_SENDFILE 0 #define HAVE_MMAP 0 double sendfile_implementation(int src,int dst,double offset,int to_send); #else #define MADV_SEQUENTIAL 0 #define HAVE_SENDFILE 0 #define HAVE_MMAP 0 double sendfile_implementation(int src,int dst,double offset,size_t to_send); #endif