Man page - utimensat(2)

Packages contains this manual

Available languages:

en fr ja ru

Manual

utimensat

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
Droits d’accĂšs nĂ©cessaires
Spécificités de utimensat()
VALEUR RENVOYÉE
ERREURS
ATTRIBUTS
VERSIONS
DiffĂ©rences entre la bibliothĂšque C et l’ABI du noyau
STANDARDS
VERSIONS
NOTES
BOGUES
VOIR AUSSI
TRADUCTION

NOM

utimensat, futimens - Modifier les horodatages d’un fichier avec une prĂ©cision d’une nanoseconde

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <fcntl.h> /* Définition des constantes AT_* */
#include <sys/stat.h>

int utimensat(int dirfd , const char * pathname ,
const struct timespec
times [_Nullable 2], int flags );
int futimens(int
fd , const struct timespec times [_Nullable 2]);

Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros (7)) :

utimensat ():
Depuis la glibc 2.10 :
_POSIX_C_SOURCE >= 200809L
avant la glibc 2.10 :
_ATFILE_SOURCE

futimens ():
Depuis la glibc 2.10 :
_POSIX_C_SOURCE >= 200809L
Avant la glibc 2.10 :
_GNU_SOURCE

DESCRIPTION

utimensat () et futimens () mettent Ă  jour les horodatages d’un fichier avec une prĂ©cision d’une nanoseconde. Cela 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 fourni dans pathname . Avec futimens (), le fichier dont les horodatages doivent ĂȘ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[0] : times 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 POSIX (1er janvier 1970 à 00:00:00 UTC). Cette information est transmise dans une structure timespec (3).

Les horodatages de fichier mis Ă  jour sont configurĂ©s Ă  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.

L’heure du changement d’état (ctime) sera rĂ©glĂ©e Ă  l’heure actuelle, mĂȘme si les autres horodatages ne sont pas vraiment modifiĂ©s.

Droits d’accĂšs nĂ©cessaires

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 :

-

soit que l’utilisateur ait les droits d’écriture sur le fichier ;

-

soit que l’identifiant effectif de l’appelant corresponde au propriĂ©taire du fichier ;

-

ou bien que le processus appelant ait les privilÚges nécessaires.

Pour pouvoir effectuer d’autres changements que de dĂ©finir les horodatages Ă  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.

Spécificités de utimensat()

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 cela 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 absolu, alors dirfd est ignoré.

Le paramÚtre flags est un masque de bits créé par un OU binaire entre zéro ou plus des valeurs suivantes définies dans <fcntl.h> :
AT_EMPTY_PATH
(depuis Linux 5.8)

Si pathname est une chaĂźne vide, opĂ©rer sur le fichier auquel dirfd fait rĂ©fĂ©rence (qui peut avoir Ă©tĂ© obtenu en utilisant le paramĂštre O_PATH de open (2)). Dans ce cas, dirfd peut faire rĂ©fĂ©rence Ă  tout type de fichier, pas seulement Ă  un rĂ©pertoire. Si dirfd est AT_FDCWD , l’appel opĂšre sur le rĂ©pertoire de travail en cours. Ce paramĂštre est spĂ©cifique Ă  Linux ; dĂ©finir _GNU_SOURCE pour obtenir sa dĂ©finition.

AT_SYMLINK_NOFOLLOW

Si pathname indique un lien symbolique, alors mettre Ă  jour l’horodatage du lien, plutĂŽt que du fichier pointĂ©.

VALEUR RENVOYÉE

S’ils rĂ©ussissent, les appels utimensat () et futimens () renvoient zĂ©ro, sinon ils renvoient -1 et errno est dĂ©fini pour indiquer l’erreur.

ERREURS

EACCES

times vaut NULL ou les deux champs tv_nsec valent UTIME_NOW et l’identifiant de l’utilisateur effectif de l’appelant ne correspond pas au propriĂ©taire du fichier, l’appelant n’a pas la permission d’écriture sur le fichier et l’appelant n’est pas privilĂ©giĂ© (sous Linux : n’a ni la capacitĂ© CAP_FOWNER , ni la capacitĂ© CAP_DAC_OVERRIDE ).

EBADF

( futimens ()) fd n’est pas un descripteur de fichier valable.

EBADF

( utimensat ()) pathname est relatif, mais dirfd n’est ni AT_FDCWD , ni un descripteur de fichier valable.

EFAULT

times pointe vers une adresse incorrecte ; ou dirfd valait AT_FDCWD et pathname est NULL ou une adresse incorrecte.

EINVAL

Valeur incorrecte dans flags .

EINVAL

Valeur incorrecte dans un des champs tv_nsec (valeur en dehors de l’intervalle allant de 0 à 999 999 999 et ne valant ni UTIME_NOW , ni UTIME_OMIT ) ; ou une valeur incorrecte dans un des champs tv_sec .

EINVAL

pathname est NULL, dirfd ne vaut pas AT_FDCWD et flags contient AT_SYMLINK_NOFOLLOW .

ELOOP

( utimensat ()) Trop de liens symboliques ont été rencontrés en parcourant pathname .

ENAMETOOLONG

( utimensat ()) pathname est trop long.

ENOENT

( utimensat ()) Un Ă©lĂ©ment du chemin d’accĂšs pathname ne correspond pas Ă  un rĂ©pertoire ou Ă  un fichier existant, ou pathname est une chaĂźne vide.

ENOTDIR

( utimensat ()) pathname est un chemin relatif, mais dirfd n’est ni AT_FDCWD , ni un descripteur de fichier correspondant Ă  un rĂ©pertoire ; ou l’un des composants au dĂ©but de pathname n’est pas un rĂ©pertoire.

EPERM

L’appelant a essayĂ© de modifier un horodatage (ou les deux) en une valeur autre que l’heure actuelle ou de modifier un des horodatages en l’heure actuelle sans changer l’autre horodatage (c’est-Ă -dire times n’est pas NULL, aucun des deux champs tv_nsec ne vaut UTIME_NOW et aucun des deux champs tv_nsec ne vaut UTIME_OMIT ) et :

-

l’identifiant d’utilisateur effectif de l’appelant ne correspond pas au propriĂ©taire du fichier et l’appelant n’est pas privilĂ©giĂ© (sous Linux : n’a pas la capacitĂ© CAP_FOWNER ) ; ou,

-

le fichier est marquĂ© comme n’acceptant que des ajouts ou est immuable (voir chattr (1)).

EROFS

Le fichier se trouve sur un systĂšme de fichiers en lecture seule.

ESRCH

( utimensat ()) Un Ă©lĂ©ment au dĂ©but du chemin d’accĂšs pathname ne permet pas le parcours.

ATTRIBUTS

Pour une explication des termes utilisés dans cette section, consulter attributes (7).

Image grohtml-3854285-1.png

VERSIONS

DiffĂ©rences entre la bibliothĂšque C et l’ABI du noyau

Sous Linux, futimens () est une fonction de bibliothĂšque implĂ©mentĂ©e Ă  l’aide de l’appel systĂšme utimensat (). Pour cela, 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);

Notez nĂ©anmoins que l’enveloppe de la glibc pour utimensat () n’autorise pas le passage de NULL comme valeur de pathname : dans ce cas, la fonction d’enveloppe renvoie l’erreur EINVAL .

STANDARDS

POSIX.1-2008.

VERSIONS

utimensat ()

Linux 2.6.22, glibc 2.6. POSIX.1-2008.

futimens ()

glibc 2.6. POSIX.1-2008.

NOTES

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 fichiers 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

Si les deux champs tv_nsec valent UTIME_OMIT , alors l’implĂ©menation de utimensat () dans Linux rĂ©ussit mĂȘme si le fichier rĂ©fĂ©rencĂ© par dirfd et pathname n’existe pas.

BOGUES

Plusieurs bogues affectent utimensat () et futimens () avant Linux 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.

-

POSIX.1 spĂ©cifie que si un des champs tv_nsec prend la valeur UTIME_NOW ou UTIME_OMIT , alors la valeur du champs tv_sec correspondant doit ĂȘtre ignorĂ©e. À la place, la valeur du champ tv_sec doit ĂȘtre nulle (ou une erreur EINVAL sera produite).

-

Ces bogues indiquent que pour ce qui est de la vĂ©rification des droits, le cas oĂč les deux champs tv_nsec ne valent pas UTIME_NOW n’est pas toujours traitĂ© de la mĂȘme façon que lorsque times est NULL, et le cas oĂč une des valeurs tv_nsec vaut UTIME_NOW et l’autre vaut UTIME_OMIT n’est pas traitĂ© de la mĂȘme façon que quand times pointe vers un tableau de structures contenant des valeurs de temps arbitraires. De ce fait, il se peut que : a) des horodatages de fichier puissent ĂȘtre mis Ă  jour par un processus qui ne devrait pas avoir le droit de faire ces mises Ă  jour ; b) des horodatages de fichier ne puissent pas ĂȘtre mis Ă  jour par un processus qui devrait avoir le droit de faire ces mises Ă  jour ; et c) la mauvaise valeur d’ errno puisse ĂȘtre renvoyĂ©e en cas d’erreur.

-

POSIX.1 indique qu’un processus qui a les droits d’accĂšs en Ă©criture pour un fichier peut faire un appel avec times valant NULL ou avec times pointant vers un tableau de structures dans lesquelles les deux champs tv_nsec valent UTIME_NOW pour mettre Ă  jour les deux horodatages Ă  l’heure actuelle. Cependant, futimens () vĂ©rifie Ă  la place si le mode d’accĂšs du descripteur de fichier permet l’écriture .

VOIR AUSSI

chattr (1), touch (1), futimesat (2), openat (2), stat (2), utimes (2), futimes (3), timespec (3), inode (7), path_resolution (7), symlink (7)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .