Voltar à lista
Linux x86_64Arquivos & E/S#257

openat

Como open, mas resolve caminhos relativos a partir de um descritor de diretório em vez do diretório de trabalho atual.

Descrição

Parte da família *at() introduzida para permitir operação segura em múltiplas threads que trabalham em diretórios diferentes (que não podem compartilhar um único 'diretório de trabalho atual' por processo), e para evitar condições de corrida TOCTOU ao caminhar por uma árvore de diretórios.

Header: fcntl.hman 2Desde o kernel 2.6.16

Assinatura

int openat(int dirfd, const char * pathname, int flags, mode_t mode);

Parâmetros

ParâmetroTipoDescrição
dirfdintDescritor do diretório base, ou AT_FDCWD para o diretório de trabalho atual.
pathnameconst char *Caminho, absoluto ou relativo a `dirfd`.
flagsintMesmas flags de `open`.
modemode_tPermissões do arquivo, se criado com O_CREAT.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1dirfdint
rsiargumento 2pathnameconst char *
rdxargumento 3flagsint
r10argumento 4modemode_t

Valor de retorno

Um novo descritor de arquivo em sucesso; -1 em erro, com errno definido.

Códigos de erro (errno)

EACCES(13)
Permissão negada.
EBADF(9)
Descritor de arquivo inválido.
EEXIST(17)
Arquivo já existe.
ENOENT(2)
Arquivo ou diretório inexistente.
ENOTDIR(20)
Não é um diretório.

Relacionadas

Equivalente em Windows Win32