/* wr.cpp
* it use read/write
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define BUF_SIZE 4096
int main(int argc, char *argv[])
{
char buf[BUF_SIZE];
int in = open("1.rmvb",O_RDONLY);
int out = open("1.cp.rmvb",O_WRONLY|O_CREAT,0766);
ssize_t nread;
while( (nread = read(in,buf,BUF_SIZE)) > 0 )
{
write(out,buf,nread);
}
return 0;
}
//
/* splice.cpp
* it use splice
*/
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define BUF_SIZE 4096
int main(int argc, char *argv[])
{
char buf[BUF_SIZE];
int in = open("1.rmvb",O_RDONLY);
int out = open("1.cp.rmvb",O_WRONLY|O_CREAT,0766);
ssize_t nread;
while( (nread = splice(in,NULL,p[1],NULL,BUF_SIZE,0)) > 0)
splice(p[0],NULL,out,NULL,BUF_SIZE,0);
return 0;
}
答案 0 :(得分:0)
你确定,你的一个描述符实际上是一个管道吗?
因为,man splice
说:
...它将文件描述符fd_in中的len个字节数据传输到文件描述符fd_out,,其中一个描述符必须引用管道。