Definition | #include <unistd.h> Optional #include <sys/types.h> (Ende) int chown(const char *path, uid_t owner, gid_t group); int fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); |
Beschreibung | path zeigt auf einen Pfadnamen, der eine Datei bezeichnet. Die Benutzer- und Gruppennummer der benannten Datei werden auf die numerischen Werte gesetzt, die in owner und group enthalten sind. Nur Prozesse, deren effektive Benutzernummer gleich der Benutzernummer der Datei ist oder die Sonderrechte haben, können die Benutzer- oder Gruppennummer einer Datei ändern. Wenn {_POSIX_CHOWN_RESTRICTED} für path aktiv ist, dann gilt: - Die Änderung der Benutzernummer ist auf Prozesse mit Sonderrechten beschränkt.
- Die Änderung der Gruppennummer ist einem Prozess, dessen effektive Benutzernummer gleich der Benutzernummer der Datei ist, der aber keine Sonderrechte hat, nur dann erlaubt, wenn owner gleich der Benutzernummer der Datei und group entweder gleich der effektiven Benutzernummer des Prozesses oder aber gleich einer seiner weiteren Gruppennummern ist.
Wenn path eine normale Datei bezeichnet, dann werden die Bits S_ISUID und S_ISGID der Datei bei erfolgreicher Rückkehr von chown() gelöscht, solange der Aufruf nicht von einem Prozess mit Sonderrechten erfolgte. Ist dies der Fall, werden unter POSIX diese Bits nicht geändert. Wenn chown() erfolgreich für eine Datei aufgerufen wird, die keine normale Datei ist, dann können diese Bits gelöscht werden. Diese Bits sind in sys/stat.h definiert. Wenn owner oder group als (uid_t)-1 oder (gid_t)-1 angegeben werden, dann wird die entsprechende Nummer der Datei nicht geändert. Nach erfolgreicher Beendigung markiert chown() das Feld st_ctime der Datei zum Aktualisieren. Die Funktion fchownat() ist äquivalent zu der Funktion chown() oder lchown() , außer wenn der Parameter path einen relativen Pfad spezifiziert. In diesem Fall wird die Datei, deren Benutzer- und Gruppennummer geändert werden soll, 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, werden die Benutzer- und Gruppennummer des symbolischen Verweises geändert. Wenn der Funktion fchownat() für den Parameter fd der Wert AT_FDCWD übergeben wurde, wird das aktuelle Dateiverzeichnis benutzt. |
Returnwert | 0 | bei Erfolg. |
| -1 | bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen. |
Fehler | chown() und fchownat() schlagen fehl, wenn gilt:
|
| EACCES
| Für eine Komponente von path existiert kein Durchsuchrecht. |
| Erweiterung |
| EFAULT
| Es wurde eine ungültige Adresse als Argument übergeben. |
| EINTR
| Während des chown -Aufrufs wurde ein Signal abgefangen. (Ende) |
| EINVAL
| Der Wert der angegebenen Benutzer- oder Gruppennummer wird nicht unterstützt, z.B. wenn der Wert kleiner als 0 ist, oder es wurde versucht, auf eine BS2000-Datei zuzugreifen. |
| Erweiterung |
| EIO
| Während des Lesens oder Schreibens im Dateisystem trat ein Ein-/Ausgabefehler auf. |
| ELOOP
| Während der Übersetzung von path waren zu viele symbolische Verweise vorhanden. (Ende) |
| ENAMETOOLONG
|
|
| Die Länge des Arguments path überschreitet {PATH_MAX} , oder eine Pfadnamen-Komponente 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 passt nicht zum Eigentümer der Datei oder der aufrufende Prozess besitzt keine Sonderrechte, obwohl {_POSIX_ CHOWN_RESTRICTED} anzeigt, dass Sonderrechte gefordert werden.. |
| EROFS
| Die bezeichnete Datei befindet sich in einem nur zum Lesen eingehängten Dateisystem. |
| Zusätzlich schlägt fchownat() 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, oder der Parameter flag hat den Wert AT_REMOVEDIR und path spezifiziert kein Dateiverzeichnis. |
| EINVAL
| Der Wert des Parameters flag ist ungültig. |
Hinweis | chown() und fchownat() werden nur für POSIX-Dateien ausgeführt.
|
Siehe auch | chmod() , fcntl.h , sys/stat.h , sys/types.h , unistd.h .
|