ACCESS(2)

NOMBRE
access - comprueba las autorizaciones del usuario para un fichero

SINOPSIS
#include <unistd.h>

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

DESCRIPCIÓN
access comprueba si el proceso es capaz de leer, escribir o detectar la existencia del fichero (o cualquier otro objeto del sistema de ficheros) cuyo nombre es pathname. mode es una máscara consistente de una o más de las siguientes R_OK, W_OK, X_OK y F_OK. R_OK, W_OK y X_OK solicitan comprobar la lectura, escritura y ejecutabilidad del fichero, respectivamente. F_OK solicita comprobar si el chequeo por la existencia del fichero está permitido (esto depende de las autorizaciones de los directorios encontrados en el camino al fichero, según dado en pathname y posiblemente en ligaduras simbólicas encontradas). La comprobación se realiza con el uid y gid real del proceso, en vez de los id-es efectivos que es como normalmente se realiza cuando se intenta dicha operación. La finalidad de dicha variación es permitir programas set-UID determinar fácilmente las autorizaciones del usuario invocador. Solamente se chequean los bits, no el tipo del fichero o sus contenidos. Por lo tanto, si se encuentra un directorio como "escribible", esto probablemente significa que está permitido escribir ficheros en dicho directorio, y no que el directorio puede escribirse como si fuese un fichero. Similarmente, un fichero DOS puede encontrarse como ejecutable, sin embargo una llamada execve(2) fallaría.

VALOR REGRESADO
A la salida, un valor de cero indica éxito (todas las autorizaciones pedidas ha sido otorgadas). En caso de error (al menos un bit en mode interrogó por una autorización que ha sido denegada, o algún otro tipo de error ha ocurrido), -1 sería el resultado, y errno es asignado un valor apropiado.

ERRORES

EACCES
    El accesso solicitado sería denegado, ya sea al fichero mismo o a uno de los directorios en el pathname.

EFAULT
    pathname señala fuera del espacio de direciones accesible.

EINVAL
    mode ha sido especificado incorrectamente.

ENAMETOOLONG
    pathname es demasiado largo.

ENOENT
    Cierto directorio en pathname habría sido accesible pero no existe o simplemente se trata de una ligadura simbólica colgada.

ENOTDIR
    Un componente usado como directorio en pathname de hecho, no es un directorio.

ENOMEM
    No hay suficiente memoria disponible en el kernel.

ELOOP
    pathname contiene una referencia a una ligadura simbólica circular, esto es, una ligadura que se refiere a si misma.

CONFORMA CON
SVID, AT&T, POSIX, X/OPEN, BSD 4.3

VÉASE
stat(2), open(2), chmod(2), chown(2), setuid(2), setgid(2) .