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 2Atençã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âmetro | Tipo | Descrição |
|---|---|---|
| pathname | const char * | Caminho a verificar. |
| mode | int | F_OK (existência) ou combinação de R_OK, W_OK, X_OK. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | pathnameconst char * |
| rsi | argumento 2 | modeint |
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.