2010-08-17 12 views
9

Estoy portando código de kernel de Linux antiguo para la versión más reciente 2.6.32.Cómo copiar el archivo struct?

Hay una parte que copia un descriptor de archivo. La idea era asignar un nuevo descriptor de archivo y un nuevo archivo de estructura y usarlos con otro f_op y, dejando todos los demás campos del archivo struct equivalentes a los originales.

¿Cómo hago esto en un kernel moderno? He escrito una implementación aproximada, pero no sé si debo llamar a file_get, path_get o hacer uso del incremento de contador.

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. De hecho, no es necesario tener todos los archivos de archivo original copiados. Solo necesito permitir un nuevo conjunto de operaciones de archivos en el espacio de usuario. Así que crear un nuevo descriptor propiedad de actual con un dado f_op hará.

+0

No está claro cuál es su objetivo. ¿Desea un nuevo descriptor de archivo que apunte al mismo archivo o una copia del archivo con una ruta diferente? –

+0

Quiero un descriptor de archivo que apunta al mismo archivo pero tiene un conjunto diferente de operaciones de archivo (close, ioctl). – Basilevs

+0

En realidad, cualquier información sobre la asignación de estructura de archivos podría ayudar. – Basilevs

Respuesta