Subroutine chmod, fchmod oder fchmodat
Zweck
Ändert die Bit für den Basisdateimodus des Dateisystemobjekts.
Bibliothek
Standard-C-Bibliothek (libc.a)
Syntax
#include <sys/stat.h>
int chmod (Path, Mode)
const char *Path;
mode_t Mode;
int fchmod (FileDescriptor, Mode)
int FileDescriptor;
mode_t Mode;
int fchmodat (DirFileDescriptor, Path, Mode, Flag)
int DirFileDescriptor;
const char *Path;
mode_t Mode;
int Flag;
Beschreibung
Die Subroutine chmod legt die Zugriffsberechtigungen der Datei fest, die mit dem Parameter Pfad angegeben wird. Wenn Network File System (NFS) auf Ihrem System installiert ist, kann dieser Pfad zu einem anderen Knoten wechseln.
Verwenden Sie die Subroutine fchmod , um die Zugriffsberechtigungen für eine offene Datei festzulegen, auf die der Parameter FileDescriptor verweist.
Wenn FileDescriptor ein gemeinsam genutztes Speicherobjekt referenziert, wirkt sich die Subroutine fchmod auf die Dateiberechtigungsbits S_IRUSR, S_IWUSR, S_IRGRP, S_IWGRP, S_IROTHund S_IWOTH aus.
Die Zugriffssteuerungsinformationen werden entsprechend dem Parameter Modus festgelegt. Beachten Sie, dass diese Routinen jede vorhandene ACL ersetzen, die dem Dateisystemobjekt zugeordnet ist.
Das Unterprogramm fchmodat entspricht dem Unterprogramm chmod, wenn der Parameter Path einen absoluten Pfad angibt oder wenn der Parameter DirFileDescriptor auf AT_FDCWD gesetzt ist. Die zu ändernde Datei wird durch den relativen Pfad zu dem Verzeichnis bestimmt, das mit dem Parameter DirFileDescriptor anstelle des aktuellen Arbeitsverzeichnisses verbunden ist. Wenn das Verzeichnis ohne das Öffnungsflag O_SEARCH geöffnet wird, prüft die Subroutine mithilfe der aktuellen Berechtigungen des Verzeichnisses, ob Verzeichnissuchen zulässig sind. Wenn das Verzeichnis mit dem Flag O_SEARCH geöffnet wird, führt die Subroutine keine Prüfung durch.
Parameter
| Element | Beschreibung |
|---|---|
| FileDescriptor | Gibt den Dateideskriptor einer offenen Datei oder eines gemeinsam genutzten Speicherobjekts an |
| Modus | Gibt das Bitmuster an, das die Zugriffsberechtigungen bestimmt. Der Parameter Modus wird durch logisches ODER mit einem oder mehreren der folgenden Werte erstellt, die in der Datei sys/mode.h definiert sind:
Die folgenden Attribute gelten nur für Dateien, die direkt ausführbar sind. Sie haben keine Bedeutung, wenn sie auf ausführbare Textdateien wie Shell-Scripts und awk -Scripts angewendet werden.
Es gibt andere Moduswerte, die mit der Subroutine mknod , aber nicht mit der Subroutine chmod festgelegt werden können. |
| Pfad | Gibt den Pfadnamen der Datei an. Wenn bei fchmodat der DirFileDescriptor angegeben ist und Path relativ ist, dann gibt der DirFileDescriptor das effektive aktuelle Arbeitsverzeichnis für Path an. |
| DirFileDescriptor | Gibt den Dateideskriptor eines geöffneten Verzeichnisses an, der als aktuelles Arbeitsverzeichnis für den Parameter Pfad verwendet wird. Wenn DirFileDescriptor gleich AT_FDCWD ist, wird der Parameter DirFileDescriptor ignoriert und das Argument Path gibt die vollständige Datei an. |
| Markierung | Gibt ein Bitfeldargument an Wenn der Parameter Flag das Bit AT_SYMLINK_NOFOLLOW enthält und der Parameter Pfad eine symbolische Verbindung angibt, wird der Modus der symbolischen Verbindung geändert. |
Rückgabewerte
Nach erfolgreicher Beendigung geben die Subroutinen chmod, fchmodund fchmodat den Wert 0 zurück. Wenn das Unterprogramm chmod, fchmod oder fchmodat nicht erfolgreich ist, wird der Wert -1 zurückgegeben, und die globale Variable errno wird gesetzt, um den Fehler zu identifizieren.
Fehlercodes
Die Subroutine chmod oder fchmodat ist nicht erfolgreich und die Dateiberechtigungen bleiben unverändert, wenn eine der folgenden Bedingungen zutrifft:
| Element | Beschreibung |
|---|---|
| ENOTDIR | Eine Komponente des Präfix Path ist kein Verzeichnis. |
| EACCES | Die Suchberechtigung für eine Komponente des Präfix Path wird verweigert. |
| EFAULT | Der Parameter Pfad verweist auf eine Position außerhalb des zugeordneten Adressraums des Prozesses. |
| ELOOP | Beim Umsetzen des Parameters Pfad wurden zu viele symbolische Links gefunden. |
| ENOENT | Die genannte Datei ist nicht vorhanden. |
| ENAMETOOLONG | Eine Komponente des Parameters Pfad überschreitet 255 Zeichen oder der gesamte Parameter Pfad überschreitet 1023 Zeichen. |
| Element | Beschreibung |
|---|---|
| EBADF | Der Wert des Parameters FileDescriptor ist ungültig. |
| Element | Beschreibung |
|---|---|
| EPERM | Die effektive Benutzer-ID stimmt nicht mit dem Eigner der Datei überein und der Prozess verfügt nicht über die entsprechenden Berechtigungen. |
| EROFS | Die benannte Datei befindet sich auf einem schreibgeschützten Dateisystem. |
| EIO | Während der Operation ist ein E/A-Fehler aufgetreten. |
Wenn NFS auf Ihrem System installiert ist, können die Subroutinen chmod und fchmod ebenfalls nicht erfolgreich sein, wenn Folgendes zutrifft:
| Element | Beschreibung |
|---|---|
| ESTALE | Das Stammverzeichnis oder das aktuelle Verzeichnis des Prozesses befindet sich in einem virtuellen Dateisystem, das abgehängt wurde. |
| ETIMEDOUT | Das Zeitlimit für die Verbindung wurde überschritten. |
Die Subroutine fchmodat ist nicht erfolgreich und die Dateiberechtigungen bleiben unverändert, wenn eine der folgenden Bedingungen zutrifft:
| Element | Beschreibung |
|---|---|
| EBADF | Der Parameter Path gibt keinen absoluten Pfad an und das Argument DirFileDescriptor ist weder AT_FDCWD noch ein gültiger Dateideskriptor. |
| EINVAL | Der Wert des Arguments Flag ist ungültig. |
| ENOTDIR | Der Parameter Path ist kein absoluter Pfad und DirFileDescriptor ist ein Dateideskriptor, der jedoch nicht mit einem Verzeichnis verknüpft ist. |
Sicherheit
Zugriffssteuerung: Der Aufrufer muss über Suchberechtigung für alle Komponenten des Präfix Path verfügen.
Wenn Sie den Fehler EBUSY empfangen, schalten Sie das Attribut enforced locking im Parameter Mode um und wiederholen Sie die Operation. Das Attribut enforced locking sollte niemals für eine Datei verwendet werden, die Teil der Trusted Computing Base ist.