Voltar à lista
Linux x86_64Sistema de arquivos#316

renameat2

Como renameat, mas com flags para renomear sem sobrescrever (RENAME_NOREPLACE), trocar dois caminhos atomicamente (RENAME_EXCHANGE), ou deixar um whiteout (RENAME_WHITEOUT).

Descrição

RENAME_EXCHANGE é particularmente útil para trocar dois arquivos/diretórios atomicamente (útil em atualizações A/B); RENAME_NOREPLACE resolve a corrida entre checar se o destino existe e renomear por cima dele.

man 2Desde o kernel 3.15

Assinatura

int renameat2(
    int olddirfd,
    const char * oldpath,
    int newdirfd,
    const char * newpath,
    unsigned int flags
);

Parâmetros

ParâmetroTipoDescrição
olddirfdintDescritor do diretório base da origem, ou AT_FDCWD.
oldpathconst char *Caminho de origem.
newdirfdintDescritor do diretório base do destino, ou AT_FDCWD.
newpathconst char *Caminho de destino.
flagsunsigned intRENAME_NOREPLACE, RENAME_EXCHANGE, RENAME_WHITEOUT.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1olddirfdint
rsiargumento 2oldpathconst char *
rdxargumento 3newdirfdint
r10argumento 4newpathconst char *
r8argumento 5flagsunsigned int

Valor de retorno

0 em sucesso; -1 em erro, com errno definido.

Códigos de erro (errno)

EEXIST(17)
Arquivo já existe.
EINVAL(22)
Argumento inválido.
ENOTDIR(20)
Não é um diretório.
EXDEV(18)
Link cruzando dispositivos/sistemas de arquivos diferentes.

Relacionadas