BEZEICHNUNG
chmod, fchmod, fchmodat - Zugriffsrechte einer Datei ändernBIBLIOTHEK
Standard-C-Bibliothek ( libc, -lc)ÜBERSICHT
#include <sys/stat.h>
int chmod(const char *Pfadname, mode_t Modus); int fchmod(int dd, mode_t Modus);
#include <fcntl.h> /* Definition der AT_*-Konstanten */ #include <sys/stat.h>
int fchmodat(int Verzdd, const char *Pfadname, mode_t Modus, int Schalter);
Mit Glibc erforderliche Feature-Test-Makros
(siehe feature_test_macros(7)):
fchmod(): Seit Glibc 2.24: _POSIX_C_SOURCE >= 199309L Glibc 2.19 bis 2.23 _POSIX_C_SOURCE Glibc 2.16 bis 2.19: _BSD_SOURCE || _POSIX_C_SOURCE Glibc 2.12 bis 2.16: _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200809L Glibc 2.11 und älter: _BSD_SOURCE || _XOPEN_SOURCE >= 500fchmodat():
Seit Glibc 2.10: _POSIX_C_SOURCE >= 200809L Vor Glibc 2.10: _ATFILE_SOURCE
BESCHREIBUNG
Die Systemaufrufe chmod() und fchmod() ändern die Modusbits einer Datei. (Die Dateimodusbits bestehen aus den Dateiberechtigungsbits sowie den Bits set-user-ID, set-group-ID und sticky). Diese Systemaufrufe unterscheiden sich nur in der Art, wie eine Datei angegeben wird:- •
- chmod() ändert den Modus der angegebenen Datei, deren Pfadname in Pfadname übergeben wird. Falls sie ein symbolischer Link ist, wird dieser dereferenziert.
- •
- fchmod() ändert den Modus der über den offenen Dateideskriptor dd angegebenen Datei.
- S_ISUID (04000)
- Set-User-ID (setzt die effektive Benutzerkennung des Prozesses bei execve(2))
- S_ISGID (02000)
- Set-Group-ID (setzt die effektive Gruppenkennung für execve(2); sperrt obligatorisch, wie in fcntl(2) beschrieben; bestimmt die Gruppe der Datei aus dem Elternverzeichnis, wie in chown(2) und mkdir(2) beschrieben
- S_ISVTX (01000)
- »Sticky Bit« (Schalter für eingeschränktes Löschen, wie in unlink(2) beschrieben)
- S_IRUSR (00400)
- Leserechte für Eigentümer
- S_IWUSR (00200)
- Schreibrechte für Eigentümer
- S_IXUSR (00100)
- Ausführungs-/Schreibrechte für Eigentümer (»suchen« trifft für Verzeichnisse zu und bedeutet, dass auf Einträge innerhalb des Verzeichnisses zugegriffen werden kann)
- S_IRGRP (00040)
- Leserechte für Gruppe
- S_IWGRP (00020)
- Schreibrechte für Gruppe
- S_IXGRP (00010)
- Ausführungs-/Schreibrechte für Gruppe
- S_IROTH (00004)
- Leserechte für andere
- S_IWOTH (00002)
- Schreibrechte für andere
- S_IXOTH (00001)
- Ausführungs-/Schreibrechte für andere
fchmodat()
Der Systemaufruf fchmodat() funktioniert genauso wie chmod(), außer den hier beschriebenen Unterschieden. Falls der in Pfadname übergebene Pfadname relativ ist wird er als relativ zu dem im Dateideskriptor Verzdd referenzierten Verzeichnis interpretiert (statt relativ zum aktuellen Arbeitsverzeichnis des aufrufenden Prozesses, wie es bei chmod() für einen relativen Pfadnamen erfolgt). Falls Pfadname relativ ist und Verzdd den besonderen Wert AT_FDCWD annimmt wird Pfadname als relativ zum aktuellen Arbeitsverzeichnis des aufrufenden Prozesses interpretiert (wie chmod()). Falls Pfadname absolut ist, wird Verzdd ignoriert. Schalter kann entweder 0 sein oder den folgenden Schalter enthalten:- AT_SYMLINK_NOFOLLOW
- Wenn der Pfadname ein symbolischer Link ist, wird er nicht dereferenziert: es wird stattdessen mit dem Link selbst gearbeitet. Dieser Schalter ist gegenwärtig nicht implementiert.
RÜCKGABEWERT
Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno gesetzt, um den Fehler anzuzeigen.FEHLER
Je nach Dateisystem können andere als die unten aufgeführten Fehler zurückgegeben werden. Die allgemeineren Fehler bei chmod() sind im Folgenden aufgeführt:- EACCES
- Eine Komponente des Pfad-Präfix darf nicht durchsucht werden. (Siehe auch path_resolution(7).)
- EBADF
- (fchmod()) Der Dateideskriptor dd ist ungültig.
- EBADF
- (fchmodat()) Der Pfadname ist relativ, aber Verzdd ist weder AT_FDCWD noch ein gültiger Dateideskriptor.
- EFAULT
- Pfadname zeigt aus dem für Sie zugänglichen Adressraum heraus.
- EINVAL
- (fchmodat()) Unzulässiger Schalter in Schalter angegeben.
- EIO
- Es ist ein E/A-Fehler (engl. I/O) aufgetreten.
- ELOOP
- Bei der Auflösung von Pfadname wurden zu viele symbolische Links gefunden.
- ENAMETOOLONG
- Pfadname ist zu lang.
- ENOENT
- Die Datei existiert nicht.
- ENOMEM
- Es war nicht genügend Kernelspeicher verfügbar.
- ENOTDIR
- Eine Komponente des Pfad-Präfixes ist kein Verzeichnis.
- ENOTDIR
- (fchmodat()) Pfadname ist relativ und Verzdd ist ein Dateideskriptor, der sich auf eine Datei bezieht, die kein Verzeichnis ist.
- ENOTSUP
- (fchmodat()) Schalter spezifizierte AT_SYMLINK_NOFOLLOW, was nicht unterstützt wird.
- EPERM
- Die effektive UID passt nicht auf den Eigentümer der Datei und der Prozess ist nicht privilegiert (Linux: Er verfügt nicht über die Capability CAP_FOWNER).
- EPERM
- Die Datei ist als unveränderlich oder nur-anhängbar markiert (siehe ioctl_iflags(2)).
- EROFS
- Die angegebene Datei befindet sich auf einem nur lesbaren (read-only) Dateisystem.
VERSIONEN
fchmodat() wurde zu Linux in Version 2.6.16 hinzugefügt; Bibliotheksunterstützung wurde zu Glibc in Version 2.4 hinzugefügt.STANDARDS
chmod(), fchmod(): 4.4BSD, SVr4, POSIX.1-2001i, POSIX.1-2008. fchmodat(): POSIX.1-2008.ANMERKUNGEN
Unterschiede C-Bibliothek/Kernel
Die Wrapper-Funktion fchmodat() der GNU-C-Bibliothek implementiert die in dieser Seite beschriebene POSIX-spezifizierte Schnittstelle. Diese Schnittstelle unterscheidet sich vom zugrunde liegenden Linux-Systemaufruf, welcher kein Schalter-Argument hat.Anmerkungen zur Glibc
Mit älteren Kernels, in denen fchmodat() nicht verfügbar ist, weicht die Glibc-Wrapper-Funktion auf chmod() aus. Wenn Pfadname ein relativer Pfadname ist, dann konstruiert die Glibc einen Pfadnamen, der auf jenem symbolischen Link in /proc/self/fd, der dem Argument Verzdd entspricht.SIEHE AUCH
chmod(1), chown(2), execve(2), open(2), stat(2), inode(7), path_resolution(7), symlink(7)ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Daniel Kobras <[email protected]>, Martin Eberhard Schauer <[email protected]>, Helge Kreutzmann <[email protected]> und Mario Blättermann <[email protected]> erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer5. Februar 2023 | Linux man-pages 6.03 |