sendfile不会复制文件内容

我创build文件1.txt 2.txt并将一些内容写入1.txt
然后我使用下面的代码,并希望将内容复制到2.txt
但它不起作用。 2.txt没有任何2.txt

你能解释我的错误吗?

 int main() { int fd1 = open("1.txt",O_RDWR); int fd2 = open("2.txt",O_RDWR); struct stat stat_buf ; fstat(fd1,&stat_buf); ssize_t size = sendfile(fd1,fd2,0,stat_buf.st_size); cout<<"fd1 size:"<<stat_buf.st_size<<endl; //output 41 cout<<strerror(errno)<<endl; //output success close(fd1); close(fd2); return 0; } 

据男子说 ,签名是

ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

因此,第一个参数是要写入的文件描述符,第二个参数是要读取的文件描述符。

所以,你的电话应该是:

ssize_t size = sendfile(fd2,fd1,0,stat_buf.st_size);

根据sendfile原型,您要写入的fd应该是第一个参数,fd从哪个读取应该是第二个参数。 但是,你用完全相反的方式。

所以,你发送文件的语句应该如下:

 ssize_t size = sendfile(fd2,fd1,0,stat_buf.st_size);