NOMBRE¶
rename - cambia el nombre y/o posición de un fichero
SINOPSIS¶
#include <stdio.h>
int rename(const char *oldpath, const char
*newpath);
DESCRIPCIÓN¶
rename renombre un fichero, moviéndolo entre directorios si así
se requiere.
Cualquier otro enlace físico al fichero (como los creados usando
link(2)) no se ve afectado.
Si
newpath ya existe será automáticamente reemplazado (sujeto a
unas pocas condiciones - ver ERRORES más adelante) de tal manera que no
haya posibilidad de que otro proceso intente acceder a
newpath y no lo
encuentre.
Si
newpath existe pero la operación falla por alguna razón,
rename garantiza dejar una instacia de
newpath en el lugar.
Sin embargo, durante una sobreescritura habrá probablemente un intervalo en
que tanto
oldpath y
newpath se refieran al fichero que se
está renombrando.
Si
oldpath se refiere a un enlace simbólico, el enlace será
renombrado; si
newpath se refiere a un enlace simbólico, el enlace
será sobreescrito.
VALOR DEVUELTO¶
En caso de éxito se devuelve 0. En caso de error se devuelve -1 y se asigna
a
errno un valor apropiado.
ERRORES¶
- EISDIR
- newpath es un directorio que ya existe pero
oldpath no es un directorio.
- EXDEV
- oldpath y newpath no están en el mismo
sistema de ficheros.
- ENOTEMPTY o EEXIST
- newpath es un directorio no vacío, es decir,
contiene entradas distintas a "." y "..".
- EBUSY
- rename falla porque oldpath o newpath
es un directorio que está siendo usado por algún proceso (tal
vez como directorio de trabajo actual, como directorio raíz o porque
lo ha abierto para lectura) o está siendo usado por el sistema (por
ejemplo, como punto de montaje), si bien el sistema considera esto un
error. (Dése cuenta que no es necesario devolver EBUSY en tales casos
- de todos modos, no hay nada incorrecto en cambiar de nombre - pero se
permite devolver EBUSY si el sistema no puede manejar tales
situaciones).
- EINVAL
- La nueva ruta contiene un prefijo de ruta de la antigua o,
de forma más general, se ha intentado convertir un directorio en
subdirectorio de si mismo.
- EMLINK
- El número de enlaces a oldpath ya ha alcanzado
el máximo permitido, o es un directorio y el directorio que contiene
a newpath ha alcanzado el número máximo de enlaces.
- ENOTDIR
- Un componente usado como directorio en oldpath o
newpath no es, de hecho, un directorio. O oldpath es un
directorio y newpath existe pero no es un directorio.
- EFAULT
- oldpath o newpath apunta fuera de su espacio
accesible de direcciones.
- EACCES
- No se permite el acceso de escritura al directorio que
contiene oldpath o newpath para el identificador de usuario
efectivo del proceso, o uno de los directorios en oldpath o
newpath no posee permiso de búsqueda (ejecución) para el
proceso, o oldpath es un directorio y no posee permiso de escritura
(necesario para actualizar la entrada ..).
- EPERM o EACCES
- El directorio que contiene oldpath tiene activo el
bit pegajoso (sticky bit) y el identificador de usuario efectivo del
proceso no es ni el del root, ni el identificador de usuario del fichero a
borrar ni del directorio que lo contiene, o newpath es un fichero
existente y el directorio que lo contiene tiene activo el bit pegajoso
(sticky bit) y el idenficador de usuario efectivo del proceso no es ni el
del root, ni el identificador de usuario del fichero a borrar ni del
directorio que lo contiene, o el sistema de ficheros que contiene
pathname no soporta el tipo de renombramiento solicitado.
- ENAMETOOLONG
- oldpath o newpath son demasiado largos.
- ENOENT
- Un directorio componente de oldpath o newpath no
existe o es un enlace simbólico colgante.
- ENOMEM
- No había suficiente memoria disponible en el
núcleo.
- EROFS
- El fichero se encuentra en un sistema de ficheros de
sólo lectura.
- ELOOP
- Se han encontrado demasiados enlaces simbólicos al
resolver oldpath o newpath.
- ENOSPC
- El dispositivo que contiene el fichero no tiene espacio
para la nueva entrada de directorio.
POSIX, 4.3BSD, ANSI C
FALLOS¶
En los sistemas de ficheros NFS no puede asumir que el fichero no ha sido
renombrado si la operación ha fallado. Si el servidor renombra el fichero
y después cae, la RPC retransmitida, que será procesada cuando el
servidor se levante de nuevo, provocará un fallo. Se supone que la
aplicación tratará este problema. Vea
link(2) para un
problema similar.
VÉASE TAMBIÉN¶
link(2),
unlink(2),
symlink(2),
mv(1)