Quando um programa deseja ler ou gravar em um arquivo, ele precisa chamar a chamada do sistema open()
para o arquivo primeiro.
Um dos argumentos para a chamada especifica quais operações o programa deseja ser capaz de fazer.
O programa indica que quer ler ou gravar o arquivo, e o processo não tem perspectiva para as operações, a open()
da chamada acaba no erro EACCESS
, e o arquivo não pode ser usado.
De maneira semelhante, quando um programa - por exemplo, seu shell - precisa executar um arquivo de programa, ele usa a chamada do sistema execve()
. Isso retorna o erro EACCESS
se a permissão de execução não for dada pelo modo de arquivo.
Abaixo estão algumas partes relevantes das páginas man na seção 2, "chamadas do sistema"
A partir da página man do open (2) man 2 open
:
OPEN(2) Linux Programmer's Manual OPEN(2)
NAME
open, creat - open and possibly create a file or device
SYNOPSIS
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags);
[...]
The argument flags must include one of the following access modes:
O_RDONLY, O_WRONLY, or O_RDWR. These request opening the file read-
only, write-only, or read/write, respectively.
[...]
ERRORS
EACCES The requested access to the file is not allowed, or search per‐
mission is denied for one of the directories in the path prefix
of pathname, or the file did not exist yet and write access to
the parent directory is not allowed. (See also path_resolu‐
tion(7).)
Da man page para execve (2) man 2 execve
:
EXECVE(2) Linux Programmer's Manual EXECVE(2)
NAME
execve - execute program
SYNOPSIS
#include <unistd.h>
int execve(const char *filename, char *const argv[],
char *const envp[]);
[...]
EACCES Execute permission is denied for the file or a script or ELF interpreter.