5 #define __NR_splice 313
7 #define __NR_vmsplice 316
8 #elif defined(__x86_64__)
9 #define __NR_splice 275
11 #define __NR_vmsplice 278
12 #elif defined(__powerpc__) || defined(__powerpc64__)
13 #define __NR_splice 283
15 #define __NR_vmsplice 285
16 #elif defined(__ia64__)
17 #define __NR_splice 1297
19 #define __NR_vmsplice 1301
21 #error unsupported arch
29 #define SPLICE_F_MOVE (0x01) /* move pages instead of copying */
30 #define SPLICE_F_NONBLOCK (0x02) /* don't block on the pipe splicing (but */
31 /* we may still block on the fd we splice */
32 /* from/to, of course */
33 #define SPLICE_F_MORE (0x04) /* expect more data */
35 static inline int splice(int fdin, loff_t *off_in, int fdout, loff_t *off_out,
36 size_t len, unsigned long flags)
38 return syscall(__NR_splice, fdin, off_in, fdout, off_out, len, flags);
42 static inline int tee(int fdin, int fdout, size_t len, unsigned int flags)
44 return syscall(__NR_tee, fdin, fdout, len, flags);
47 static inline int vmsplice(int fd, void *buffer, size_t len, unsigned int flags)
49 return syscall(__NR_vmsplice, fd, buffer, len, flags);
52 #define SPLICE_SIZE (64*1024)
54 #define BUG_ON(c) assert(!(c))
59 (void) (&_x == &_y); \
65 (void) (&_x == &_y); \
68 static inline int error(const char *n)