Definition | #include <sys/stat.h> Optional #include <sys/types.h> (Ende) int chmod(const char *path, mode_t mode); int fchmodat(int fd, const char *path, mode_t mode, int flag); |
Beschreibung | chmod() ändert S_ISUID , S_ISGID und die Schutzbits der Datei, die durch path angesprochen wird, in die entsprechenden Bits von mode um. Dazu muss die effektive Benutzernummer des Prozesses zum Eigentümer der Datei passen oder Sonderrechte besitzen.
S_ISUID , S_ISGID und die Schutzbits einer Datei werden in sys/stat.h beschrieben.
Wenn der aufrufende Prozess keine Sonderrechte besitzt und die Gruppennummer der Datei nicht zur effektiven Gruppennummer oder einer der weiteren passt und die Datei eine normale Datei ist, dann wird das Bit S_ISGID (Setze Gruppennummer bei Ausführung) in den Zugriffsrechten der Datei bei einer erfolgreichen Rückkehr von chmod() gelöscht. Im C-Laufzeitsystem wird chmod() auch für offene Dateien ausgeführt. Andere X/Open-kompatible Systeme können für diesen Fall andere Vorgaben definieren. Bei erfolgreicher Beendigung markiert chmod() das Feld st_ctime der Datei zum Aktualisieren. Die Funktion fchmodat() ist äquivalent zu der Funktion chmod() , außer wenn der Parameter path einen relativen Pfad spezifiziert. In diesem Fall wird die zu änderte Datei 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_SYMLINK_NOFOLLOW übergeben werden, der im Header fnctl.h definiert ist. Falls path einen symbolischen Verweis bezeichnet, wird der symbolische Verweis geändert. Wenn der Funktion fchmodat() für den Parameter fd der Wert AT_FDCWD übergeben wurde, wird das aktuelle Dateiverzeichnis benutzt. |
Returnwert | 0 | bei Erfolg. Die Zugriffserlaubnis der angegebenen Datei ist entsprechend gesetzt. |
| -1 | bei Fehler. Der Dateimodus wird nicht verändert. errno wird gesetzt, um den Fehler anzuzeigen. |
Fehler | chmod() und fchmodat() schlagen fehl, wenn gilt:
|
| EACCES
| Für eine Komponente des Pfadnamen-Anfangs existiert kein Durchsuchrecht. |
| Erweiterung |
| EFAULT
| path weist über den zugewiesenen Adressraum hinaus. |
| EINTR
| Ein Signal wurde während der Ausführung des Systemaufrufs abgefangen. (Ende) |
| EINVAL
| Der Wert von mode ist ungültig. |
| Erweiterung |
| EIO
| Ein Ein-/Ausgabe-Fehler trat während des Lesens oder Schreibens im Dateisystem auf. |
| ELOOP
| Während der Übersetzung von path waren zu viele symbolische Verweise vorhanden. (Ende) |
| ENAMETOOLONG
|
|
| Die Länge von path überschreitet {PATH_MAX} , oder eine Komponente des Pfadnamens ist länger als {NAME_MAX} . |
| ENOENT
| path zeigt auf den Namen einer nicht existierenden Datei oder auf die leere Zeichenkette. |
| ENOTDIR
| Eine Komponente von path ist kein Dateiverzeichnis. |
| EPERM
| Die effektive Benutzernummer entspricht nicht dem Eigentümer der Datei, und der Prozess besitzt auch keine Sonderrechte. |
| EROFS
| Die genannte Datei befindet sich in einem nur zum Lesen eingehängten Dateisystem. |
| Zusätzlich schlägt fchmodat() 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. |
| Erweiterung |
| EBADF
| Es wurde versucht, auf eine BS2000-Datei zuzugreifen. (Ende) |
| 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. |
Hinweis | fchmodat() ist nur für POSIX-Dateien erlaubt.
|
Siehe auch | chown() , fchmod() , mkdir() , mkfifo() , open() , stat() , fcntl.h , sys/types.h , sys/stat.h .
|