2010-08-17 2 views
9

Я портирую старый код ядра 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.

+0

Немного непонятно, какова ваша цель. Вы хотите, чтобы новый файловый дескриптор указывал на один и тот же файл или копию файла с другим путем? –

+0

Мне нужен файловый дескриптор, указывающий на тот же файл, но имеющий другой набор файловых операций (close, ioctl). – Basilevs

+0

Фактически любая информация о распределении структуры файла может помочь. – Basilevs

ответ

Смежные вопросы