Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sendfile doesn't copy file contents

I create files 1.txt 2.txt and write some content into 1.txt.
Then I use the code below and want to copy the content to 2.txt.
But it doesn't work. There is nothing in 2.txt.

Can you explain my mistake?

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;
}
like image 911
Tengchao Avatar asked Dec 27 '12 12:12

Tengchao


1 Answers

According to man, the signature is

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

So, the first parameter is the file descriptor into you want to write and the second one is the file descriptor you want to read from.

So, your call should be:

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

like image 137
banuj Avatar answered Oct 27 '22 00:10

banuj