Я создаю файлы 1.txt
2.txt
и написать некоторый контент в 1.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);
Согласно Отправить файл Прототип, fd, в который вы хотите записать, должен быть первым параметром, а fd, из которого вы читаете, должен быть вторым параметром. Но вы использовали это с точностью до наоборот.
Таким образом, вы должны указать следующее:
ssize_t size = sendfile(fd2,fd1,0,stat_buf.st_size);