Я портирую старый код ядра Linux для более новой версии 2.6.32.Как скопировать файл структуры?
Есть часть, которая копирует файловый дескриптор. Идея заключалась в том, чтобы выделить новый файловый дескриптор и новый файл структуры и использовать их с другим f_op и, оставив все остальные поля в файле struct file, эквивалентном оригиналу.
Как это сделать в современном ядре? Я написал примерную реализацию, но я не знаю, должен ли я назвать file_get, path_get или другие использовать счетчик инкремента.
struct file * copy_file(const struct file * iOrig, int * oNewFd) {
if (!orig)
return 0;
*oNewFd = get_unused_fd();
if (*oNewFd < 0)
return 0;
struct file * rv = alloc_file(orig->f_path.mnt, orig->f_path.dentry, orig->f_path.mode, orig->f_op);
if (!rv)
goto free_fd;
fd_install(fd, rv);
return rv;
free_fd:
put_unused_fd(*oNewFd)
return 0;
}
P.S. Фактически наличие всех файлов исходного файла, скопированного, не обязательно. Мне просто нужно разрешить новый набор файловых операций в пользовательском пространстве. Таким образом, создается новый дескриптор, принадлежащий текущим с данным f_op.
Немного непонятно, какова ваша цель. Вы хотите, чтобы новый файловый дескриптор указывал на один и тот же файл или копию файла с другим путем? –
Мне нужен файловый дескриптор, указывающий на тот же файл, но имеющий другой набор файловых операций (close, ioctl). – Basilevs
Фактически любая информация о распределении структуры файла может помочь. – Basilevs