Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

fchmod - Dateizugriffsrechte ändern

&pagelevel(4)&pagelevel

Definition

#include <sys/types.h>
#include <sys/stat.h>

int fchmod(int fildes, mode_t mode);

Beschreibung

fchmod() ändert ebenso wie chmod() S_ISUID, S_ISGID und die Schutzbits der angesprochenen Datei in die entsprechenden Bits von mode um, nur dass die Datei, deren Zugriffsrechte geändert werden sollen, nicht durch den Pfadnamen, sondern durch den Dateideskriptor fildes bezeichnet wird. Die Schutzbits werden wie folgt interpretiert (siehe auch sys/stat.h):

Symbolischer Name

Bitmuster

Bedeutung

S_ISUID

04000

Benutzernummer bei Ausführung setzen

S_ISGID

020#0

Gruppennummer bei Ausführung setzen, wenn # den Wert 7, 5, 3 oder 1 hat. Aufhebung der obligatorischen Sperre von Dateien und Dateisätzen, wenn # den Wert 6, 4, 2 oder 0 hat.

S_ISVTX

01000

Textsegment nach Ausführung sichern

S_IRWXU

00700

Lesen, Schreiben, Ausführen (Durchsuchen) durch Eigentümer

S_IRUSR

00400

Lesen durch Eigentümer

S_IWUSR

00200

Schreiben durch Eigentümer

S_IXUSR

00100

Ausführen durch Eigentümer (Durchsuchen, wenn es sich um ein Dateiverzeichnis handelt)

S_IRWXG

00070

Lesen, Schreiben, Ausführen (Durchsuchen) durch Gruppe

S_IRGRP

00040

Lesen durch Gruppe

S_IWGRP

00020

Schreiben durch Gruppe

S_IXGRP

00010

Ausführen durch Gruppe

S_IRWXO

00007

Lesen, Schreiben, Ausführen (Durchsuchen) durch Andere

S_IROTH

00004

Lesen durch Andere

S_IWOTH

00002

Schreiben durch Andere

S_IXOTH

00001

Ausführen durch Andere

Andere Modi werden durch bitweise ODER-Verknüpfung der Zugriffsmodi erzeugt.

Die effektive Benutzernummer des Prozesses muss mit der des Eigentümers der Datei übereinstimmen oder der Prozess muss das entsprechende Privileg haben, damit der Modus einer Datei geändert werden kann.

Wenn weder der Prozess noch ein Mitglied der anhängenden Gruppenliste privilegiert ist und die effektive Gruppennummer des Prozesses nicht mit der Gruppennummer der Datei übereinstimmt, wird das Schutzbit 02000 (Gruppennummer bei Ausführung setzen) gelöscht.

Wenn das Schutzbit 02000 (Gruppennummer bei Ausführung setzen) gesetzt und das Modusbit 00010 (Ausführen oder Suchen durch Gruppe) nicht gesetzt ist, liegt das obligatorische Sperren von Dateien und Dateisätzen bei einer normalen Datei vor. Dies kann zukünftige Aufrufe von open(), creat(), read() und write() auf diese Datei beeinflussen.

Wenn der Prozess kein privilegierter Prozess und die Datei kein Dateiverzeichnis ist, wird das Modusbit 01000 (Textsegment nach Ausführung sichern) gelöscht.

Wenn ein Verzeichnis beschrieben werden kann und das Sticky-Bit gesetzt ist, können Dateien in diesem Verzeichnis nur dann gelöscht oder umbenannt werden, wenn mindestens eine der folgenden Bedingungen zutrifft (siehe unlink() und rename()):

die Datei gehört dem Benutzer
das Verzeichnis gehört dem Benutzer
der Benutzer hat das Recht, auf die Datei zu schreiben
der Benutzer ist ein privilegierter Benutzer

Bei einer erfolgreichen Beendigung markiert fchmod() das Feld st_ctime der Datei zum Aktualisieren.

Returnwert

0

bei Erfolg.

 

-1

bei Fehler. Der Dateimodus wird nicht verändert. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

fchmod() schlägt fehl, wenn gilt:


EBADF

fildes ist kein offener Dateideskriptor.


EINVAL

Es wurde versucht, auf eine BS2000-Datei zuzugreifen, oder der Wert von  mode ist ungültig.


EIO

Während des Lesens oder Schreibens im Dateisystem trat ein Fehler auf.


EINTR

Ein Signal wurde während der Ausführung des fchmod()-Systemaufrufs abgefangen.


EPERM

Die Benutzernummer entspricht nicht der des Dateieigentümers, und der Prozess ist nicht entsprechend privilegiert.

 

EROFS

Die durch fildes angegebene Datei steht in einem schreibgeschützten Dateisystem.

Hinweis

fchmod() wird nur für POSIX-Dateien ausgeführt.

Siehe auch

chmod(), chown(), creat(), fcntl(), fstatvfs(), mknod(), open(), read(), rename(), stat(), unlink(), write(), sys/stat.h, sys/types.h.