Voltar à lista
Linux x86_64Sistema de arquivos#21

access

Verifica se o processo chamador teria permissão de acessar um arquivo, usando UID/GID reais (não efetivos).

Descrição

Útil para programas setuid checarem se o usuário real teria acesso a um arquivo antes de agir em seu nome — checar com o UID efetivo (root, tipicamente) daria um resultado enganoso.

Header: unistd.hman 2

Atenção

Checar com `access` e depois agir (ex.: abrir o arquivo) é inerentemente uma condição de corrida TOCTOU — entre as duas chamadas o arquivo pode mudar. Prefira tentar a operação diretamente e tratar o erro.

Assinatura

int access(const char * pathname, int mode);

Parâmetros

ParâmetroTipoDescrição
pathnameconst char *Caminho a verificar.
modeintF_OK (existência) ou combinação de R_OK, W_OK, X_OK.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1pathnameconst char *
rsiargumento 2modeint

Valor de retorno

0 se o acesso seria permitido; -1 caso contrário, com errno definido.

Códigos de erro (errno)

EACCES(13)
Permissão negada.
ELOOP(40)
Excesso de níveis de links simbólicos (loop de symlinks).
ENAMETOOLONG(36)
Nome de arquivo/caminho grande demais.
ENOENT(2)
Arquivo ou diretório inexistente.
ENOTDIR(20)
Não é um diretório.

Relacionadas