У меня проблема с модулем linux, я хочу клонировать файл из файлового дескриптора. Я пытался использовать
vfs_clone_file_range
, но я получаю ошибку EOPNOTSUPP. Поэтому я попытался использовать vfs_copy_file_range, и копия работает правильно, но мне нужно иметь также те же флаги оригинала, но таким образом, даже если оригинал открыт с O_APPEND, указатель копии всегда находится в начале файла.
Это мой код:
//The file descriptor is taken correctly and it works
original_filp = fcheck(o_fd);
copy_filp = filp_open(addr, O_CREAT | O_RDWR , 0644);
vfs_copy_file_range(original_filp, 0, copy_filp, 0, i_size_read(original_filp->f_inode), 0);
Содержимое правильное, но указатель, как я уже сказал, находится в начале даже с флагом O_APPEND, поэтому я должен двигаться указатель явно. Я также пытался добавить эту строку, но безрезультатно:
copy_filp->f_pos = original_filp->f_pos;
Я действительно понятия не имею, что нужно изменить, чтобы заставить его работать. Заранее благодарю за помощь