utimensat, futimens
Modifier les horodatages d'un fichier avec une précision d'une nanoseconde
- Provided by: manpages-fr-dev (Version: 3.65d1p1-1)
- Source: manpages-fr
- Report a bug
Modifier les horodatages d'un fichier avec une précision d'une nanoseconde
#include <fcntl.h> /* Définition des constantes AT_* */
#include <sys/stat.h>
int utimensat(int dirfd, const char *pathname,
const struct timespec times[2], int flags);
int futimens(int fd, const struct timespec times[2]);
Exigences de macros de test de fonctionnalités pour la glibc (consultez
feature_test_macros(7)) :
utimensat():
futimens():
utimensat() et futimens() mettent à jour les horodatages d'un fichier avec une précision d'une nanoseconde. Ceci change de l'appel historique ou de utimes(2), qui permettent seulement une précision d'une seconde et d'une microseconde respectivement pour l'établissement des horodatages de fichier.
Avec utimensat(), le fichier est indiqué à l'aide du chemin fournit dans pathname. Avec futimens(), le fichier dont les horodatages doit être mis à jour est indiqué par un descripteur de fichier ouvert, fd.
Pour les deux appels, les nouveaux horodatages de fichier sont
indiqués dans le tableau times : times[0]
indique l'horodatage du dernier accès (atime) ;
times[1] indique l'horodatage de la dernière modification
(mtime). Chaque élément de times indique une
date par un nombre de secondes et de nanosecondes depuis l'époque
(1er janvier 1970 à 00:00:00 UTC). Cette information
est transmise dans une structure de la forme suivante :
struct timespec {
time_t tv_sec; /* secondes */
long tv_nsec; /* nanosecondes */
};
L'horodatage mis à jour pour le fichier est configuré à la valeur la plus importante gérée par le système de fichiers et qui n'est pas supérieure à l'horodatage fourni
Si le champ tv_nsec d'une des structures timespec prend la valeur particulière UTIME_NOW, alors l'horodatage correspondant du fichier est défini à l'heure actuelle. Si le champ tv_nsec d'une des structures timespec prend la valeur particulière UTIME_OMIT, alors l'horodatage correspondant du fichier reste inchangé. Dans ces deux cas, la valeur du champ tv_sec est ignoré.
Si times est NULL, les deux horodatages sont définis à l'heure actuelle.
Pour définir les deux horodatages à l'heure actuelle (c'est-à-dire quand times vaut NULL ou que les deux champs tv_nsec valent UTIME_NOW), il faut :
Pour pouvoir effectuer d'autres changements que de définir les horodatage à l'heure actuelle (c'est-à-dire quand times n'est pas NULL et que ni le champ tv_nsec ne vaut UTIME_NOW ni le champ tv_nsec ne vaut UTIME_OMIT), les conditions 2 ou 3 ci-dessus s'appliquent.
Si les deux champs tv_nsec valent UTIME_OMIT, aucune vérification n'est effectuée sur le propriétaire ou les permissions et les horodatages ne sont pas modifiés, mais les autres situations d'erreur sont toujours détectées.
Si le chemin donné dans pathname est relatif, il est par défaut interprété par rapport au répertoire référencé par le descripteur de fichier ouvert dirfd (plutôt que par rapport au répertoire courant du processus, comme pour utimes(2) pour les chemins relatifs). Consultez openat(2) pour avoir les raisons pour lesquelles ceci peut être utile.
Si pathname est un chemin relatif, et si dirfd a la valeur spéciale AT_FDCWD, alors pathname est interprété par rapport au répertoire courant du processus appelant, comme dans utimes(2).
Si pathname est un chemin absolu, dirfd est ignoré.
Le champ flags est un champ de bits qui peut être nul ou inclure les constantes suivantes, définies dans <fcntl.h> :
S'ils réussissent les appels utimensat() et futimens() renvoient zéro, sinon ils renvoient -1 et remplissent errno avec le code d'erreur.
utimensat() a été ajouté à Linux dans le noyau 2.6.22 ; la glibc le gère depuis la version 2.6.
La prise en charge de futimens() est apparu dans la glibc 2.6.
futimens() et utimensat() sont spécifiés dans POSIX.1-2008.
utimensat() rend futimesat(2) obsolète.
Sous Linux, les horodatages ne peuvent pas être modifiés pour un fichier marqué comme étant immuable, et la seule modification autorisée pour les fichier n'autorisant que des ajouts est de définir les horodatages à l'heure actuelle. (C'est cohérent avec le comportement historique de utime(2) et de utimes(2) sous Linux)
Sous Linux, futimens() est une fonction de bibliothèque implémentée à l'aide de l'appel système utimensat(). Pour ceci, l'appel système utimensat() de Linux implémente une fonctionnalité non standard : si pathname est NULL, alors l'appel modifie les horodatages du fichier correspondant au descripteur de fichier dirfd (qui peut correspondre à n'importe quel type de fichier). En utilisant cette fonctionnalité, l'appel futimens(fd, times) est implémenté comme ceci :
utimensat(fd, NULL, times, 0);
Plusieurs bogues affectent utimensat() et futimens() sur les noyaux antérieurs à 2.6.26. Ces bogues sont soit des non conformités avec le brouillon de la spécification POSIX.1 soit des incohérences avec le comportement historique de Linux.
chattr(1), futimesat(2), openat(2), stat(2), utimes(2), futimes(3), path_resolution(7), symlink(7)
Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.
Alain Portal <http://manpagesfr.free.fr/> (2008).
Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C <section> <page_de_man> ».