Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

utimensat, utimensat64 - Dateizugriffs- und -änderungszeitpunkt setzen

&pagelevel(4)&pagelevel

Definition

#include <sys/stat.h>

int utimensat(int fd, const char *path, const struct timespec times[2], int flag);

CRTE111A30

int utimensat64(int fd, const char *path, const struct timespec64 times[2], int flag); (Ende)

Beschreibung

Die Funktion utimensat() setzt die Zugriffs- und Änderungszeiten einer Datei auf die in times angegebenen Werte. Es werden die Zeiten der Datei geändert, auf die der Parameter path zeigt, relativ zu dem mit dem Dateideskriptor fd verbundenen Dateiverzeichnis. Die Funktion erlaubt nanosekundengenaue Zeitangaben.

Der Parameter times ist ein Array, das aus zwei Strukturen des Typs timespec besteht. Die Zugriffszeit wird auf den Wert des ersten Elements und die Änderungszeit auf den Wert des zweiten Elements gesetzt. Die Zeiten in der timespec-Struktur werden in Sekunden und Nanosekunden seit der Epoche angegeben.

Hat das Feld tv_nsec einer timespec-Struktur den speziellen Wert UTIME_NOW, wird der entsprechende Zeitstempel der Datei auf die aktuelle Zeit gesetzt. Hat das Feld tv_nsec einer timespec-Struktur den speziellen Wert UTIME_OMIT, soll der entsprechende Zeitstempel der Datei nicht geändert werden. In beiden Fällen wird der Inhalt des Feldes tv_sec ignoriert.

Wenn times der Nullzeiger ist, werden Zugriffs- und Änderungszeit auf die aktuelle Zeit gesetzt. Wurde der Dateideskriptor ohne O_SEARCH geöffnet, prüft die Funktion, 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.

Ein Prozess darf utimensat() nur dann mit dem Nullzeiger für times oder mit beiden tv_-nesc-Feldern auf UTIME_NOW gesetzt aufrufen, wenn er eine der folgenden Eigenschaften besitzt:

  • Eigentümer der Datei,

  • Schreibberechtigung für die Datei oder

  • besonderen Rechte.

Ein Prozess darf utimensat() nur dann mit einem von NULL verschiedenen Zeiger für times aufrufen, bei dem nicht beide tv_nesc-Felder auf UTIME_NOW oder UTIME_OMIT gesetzt sind, wenn er Eigentümer der Datei oder ein Prozess mit besonderen Rechten ist.

Sind beide tv_nesc-Felder auf UTIME_OMIT gesetzt, wird die Zugriffsberechtigung nicht geprüft. Es können aber andere Fehler auftreten.

Wenn der Funktion utimensat() für den Parameter fd der Wert AT_FDCWD übergeben wurde, wird das aktuelle Dateiverzeichnis benutzt.

Im Parameter flag kann der Wert AT_SYMLINK_NOFOLLOW übergeben werden, der im Header fnctl.h definiert ist. Falls path einen symbolischen Link bezeichnet, werden die Zeitstempel des symbolischen Links geändert.

Die Funktion utimensat64() verhält sich wie die Funktion utimensat() , außer dass sie die Struktur timepec64 anstelle der Struktur timespec verwendet und daher auch Zeitstempel, die über den 19.1.2038 03:14:07 Uhr UTC hinausgehen, verarbeitet.

Returnwert

0

bei Erfolg.


-1

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

utimensat() und utimensat64() schlagen fehl, wenn gilt:

 

EACCES

Eine Komponente des Pfades darf nicht durchsucht werden, oder times ist ein Nullzeiger und die effektive Benutzernummer ist nicht diejenige des Systemverwalters und nicht diejenige des Eigentümers der Datei, und der Schreibzugriff wird verweigert oder 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

 

EFAULT

times ist ungleich null und weist über den zugewiesenen Adressraum des Prozesses hinaus, oder path weist über den zugewiesenen Adressraum des Prozesses hinaus.

 

EINTR

Ein Signal wurde während des Systemaufrufs utimensat() bzw. utimensat64() abgefangen.

 

EINVAL

Es wurde versucht, auf eine BS2000-Datei zuzugreifen oder der Wert des Parameters flag ist ungültig.

 

ELOOP

Während der Übersetzung von path traten zu viele symbolische Verweise auf. (Ende)

 

ENAMETOOLONG 



Die Länge von path überschreitet {PATH_MAX} oder die Länge einer Komponente von path überschreitet{NAME_MAX}.

 

ENOENT

Die angegebene Datei ist nicht vorhanden.

 

ENOTDIR

Eine Komponente des Pfades ist kein Dateiverzeichnis oder der Parameter path spezifiziert keinen absoluten Pfadnamen und der Dateideskriptor fd ist nicht mit einem Dateiverzeichnis verbunden.

 

EPERM

Die effektive Benutzernummer ist nicht diejenige des Systemverwalters und nicht diejenige des Eigentümers der Datei, und times ist nicht gleich null.

 

EROFS

Das Dateisystem, das die Datei enthält, ist schreibgeschützt eingehängt.


utimensat64() schlägt fehl, wenn gilt:

 

ENOSYS

POSIX-BC Korrekturstand < A47.

Siehe auch

auch fcntl.h, sys/stat.h.