Question

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;
}
Était-ce utile?

La solution

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);

Autres conseils

As per sendfile prototype, the fd to which you want to write should be the first parameter and fd from which one reads should be the second parameter. But, you have used it the exactly opposite way.

So, you sendfile statement should be as below:

ssize_t size = sendfile(fd2,fd1,0,stat_buf.st_size);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top