Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

access, faccessat - Zugriffsrechte auf eine Datei prüfen

&pagelevel(4)&pagelevel

Definition

#include <unistd.h>

int access(const char *path, int amode);
int faccessat(int fd, const char *path, int amode, int flag); 

Beschreibung

access() prüft die Zugriffsrechte der durch das Argument path angegebenen Datei entsprechend dem Bitmuster in amode. Dabei wird die reale Benutzernummer an Stelle der effektiven und die reale Gruppennummer an Stelle der effektiven verwendet.

Für amode können folgende symbolische Konstanten angegeben werden:

R_OK

W_OK

X_OK

F_OK

Leserecht prüfen

Schreibrecht prüfen

Durchsuchrecht prüfen

Existenz der Datei prüfen

Der Wert von amode ist entweder das bitweise Inklusiv-ODER der zu prüfenden Zugriffsrechte (R_OK, W_OK, X_OK) oder die Prüfung auf Existenz F_OK (siehe auch unistd.h).

Erweiterung
Für amode können zusätzliche Werte gültig sein, z.B. wenn ein System erweiterte Zugriffssteuerung hat. (Ende)

Ein Prozess mit besonderen Rechten kann zwar Dateien durchsuchen, ohne dass das Bit für das Durchsuchrecht gesetzt ist, es wird aber bei Abfrage von X_OK kein Erfolg gemeldet.

Die Funktion faccessat() ist äquivalent zu der Funktion access(), außer wenn der Parameter path einen relativen Pfad spezifiziert. In diesem Fall wird die Datei, deren Zugriffsrechte geprüft werden sollen, nicht im aktuellen Dateiverzeichnis, sondern in dem mit dem Dateideskriptor fd verbundenen Dateiverzeichnis gesucht. Wurde der Dateideskriptor ohne O_SEARCH geöffnet, prüft die Funktionen, ob eine Suche im verbundenen Dateiverzeichnis mit den dem Dateiverzeichnis zugrunde liegenden Berechtigungen erlaubt ist. Wurde der Dateideskriptor mit O_SEARCH geöffnet, unterbleibt die Prüfung.

Im Parameter flag kann der Wert AT_EACCESS übergeben werden, der im Header fnctl.h definiert ist. In diesem Fall wird für die Prüfung die effektive statt der realen Benutzer- und Gruppennummer verwendet.

Wenn der Funktion faccessat() für den Parameter fd der Wert AT_FDCWD übergeben wurde, wird das aktuelle Dateiverzeichnis benutzt. 

Returnwert

0                             Geforderter Zugriff ist erlaubt.

-1             Zugriff ist nicht erlaubt, errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

access() und faccessat() schlagen fehl, wenn gilt:

 

EACCES

Die Schutzbiteinstellung der Datei erlaubt den geforderten Zugriff nicht, oder für eine Komponente des Pfades existiert kein Durchsuchrecht.


Erweiterung

 

EFAULT

path ist eine ungültige Adresse.

 

EINTR

Während des access-Systemaufrufs wurde ein Signal abgefangen. (Ende)

 

ELOOP

Die maximale Anzahl der symbolischen Verweise in path ist überschritten, oder die maximale Anzahl der symbolischen Verweise ist durch  MAXSYMLINKS in der Include-Datei sys/param.h beschrieben.

 

ENAMETOOLONG



Die Länge des Arguments path überschreitet {PATH_MAX} oder eine Komponente des Pfadnamens ist länger als {NAME_MAX}.

 

ENOENT

Das Argument path zeigt auf den Namen einer nicht existierenden Datei oder auf eine leere Zeichenkette.

 

ENOTDIR

Eine Komponente des Pfades ist kein Dateiverzeichnis.

 

EROFS

Schreibzugriff wurde für eine Datei auf einem Nur-Lesen-Dateisystem angefordert.


Zusätzlich schlägt faccessat() fehl, wenn gilt:

 

EACCES

Der Parameter fd wurde nicht mit O_SEARCH geöffnet und die dem Dateiverzeichnis zugrunde liegenden Berechtigungen erlauben nicht das Durchsuchen des Dateiverzeichnisses.

 

EBADF

Der Parameter path spezifiziert keinen absoluten Pfadnamen und der Parameter fd hat weder den Wert AT_FDCWD, noch enthält er einen gültigen zum Lesen oder Suchen geöffneten Dateideskriptor.

 

ENOTDIR

Der Parameter path spezifiziert keinen absoluten Pfadnamen und der Dateideskriptor fd ist nicht mit einem Dateiverzeichnis verbunden.

 

EINVAL

Der Wert des Parameters flag ist ungültig.


Erweiterung

 

EBADF

Es wurde versucht, auf eine BS2000-Datei zuzugreifen.

Hinweis

access() und faccessat() werden nur für POSIX-Dateien ausgeführt.

Siehe auch chmod(), stat(), fcntl.h, unistd.h.