posix_fadvise(2) System Calls Manual posix_fadvise(2) NOM posix_fadvise - Predeclarer des acces aux donnees d'un fichier BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int posix_fadvise(int fd, off_t offset, off_t len, int advice); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : posix_fadvise() : _POSIX_C_SOURCE >= 200112L DESCRIPTION Les programmes peuvent utiliser posix_fadvise() pour annoncer leur intention d'acceder aux donnees d'un fichier suivant un certain ordre, permettant ainsi au noyau de realiser les optimisations appropriees. L'indication advice s'applique a une region (pas necessairement existante) debutant a offset et s'etendant sur len octets (ou jusqu'a la fin du fichier si len vaut zero) dans le fichier reference par fd. L'indication advice n'oblige a rien, il s'agit seulement d'une supposition concernant le comportement futur de l'application. Les valeurs possibles pour advice incluent : POSIX_FADV_NORMAL Indique que l'application n'a pas d'indice particulier concernant les acces aux donnees du fichier. Le noyau appliquera son comportement par defaut. POSIX_FADV_SEQUENTIAL L'application pense acceder aux donnees sequentiellement (dans l'ordre des offsets croissants). POSIX_FADV_RANDOM Les acces se feront de maniere aleatoire. POSIX_FADV_NOREUSE Les donnees ne seront accedees qu'une seule fois. Avant Linux 2.6.18, POSIX_FADV_NOREUSE avait la meme semantique que POSIX_FADV_WILLNEED. Il s'agissait sans doute d'un bogue ; depuis Linux 2.6.18, cet attribut n'a aucun effet. POSIX_FADV_WILLNEED Les donnees seront accedees dans le futur proche. POSIX_FADV_WILLNEED initie une lecture non bloquante de la region indiquee dans le cache. La quantite de donnees lues peut etre diminuee suivant la charge memoire (quelques megaoctets seront en general disponibles et souvent suffisants). POSIX_FADV_DONTNEED Les donnees ne seront pas accedees dans le futur proche. POSIX_FADV_DONTNEED essaye de liberer les pages de cache associees avec la region indiquee. Cela est utile par exemple lors du parcours de tres gros fichiers. Un programme peut ainsi demander regulierement au noyau de liberer les pages deja utilisees, pour eviter que des pages plus utiles ne soient eliminees a leur place. Les requetes en desactivation de pages partielles sont ignorees. Il vaut mieux preserver que desactiver les donnees necessaires. Si l'application a besoin que les donnees soient considerees comme desactivees, offset et len doivent etre alignes sur la page. L'implementation peut essayer d'ecrire a posteriori sur des pages dans la zone indiquee, mais ce n'est pas garanti. Les pages qui n'ont pas encore ete ecrites ne seront pas liberees. Si une application veut s'assurer que les pages seront relachees, elle devrait d'abord appeler fsync(2) ou fdatasync(2). VALEUR RENVOYEE L'appel renvoie zero s'il reussit. S'il echoue, il renvoie un code d'erreur. ERREURS EBADF L'argument fd n'est pas un descripteur de fichier valable. EINVAL L'indication advice n'est pas valable. ESPIPE Le descripteur de fichier indique correspond a un tube ou une FIFO (ESPIPE est l'erreur specifiee par POSIX, mais avant Linux 2.6.16, Linux renvoyait EINVAL dans ce cas). VERSIONS Sous Linux, POSIX_FADV_NORMAL configure la fenetre de lecture anticipee a sa taille par defaut pour le peripherique concerne. POSIX_FADV_SEQUENTIAL double cette taille et POSIX_FADV_RANDOM desactive la lecture anticipee. Ces modifications affectent le fichier entier, pas seulement la region indiquee (mais les autres descripteurs ouverts sur le meme fichier ne sont pas modifies). Differences entre bibliotheque C et noyau Le nom de la fonction enveloppe dans la bibliotheque C est posix_fadvise(). L'appel systeme sous-jacent s'appelle fadvise64() (ou, sur certaines architectures, fadvise64_64()) ; la difference entre les deux est que l'ancien appel systeme suppose que le type du parametre len est size_t, tandis que le dernier attend loff_t. Variantes dependantes de l'architecture Certaines architectures necessitent que les parametres 64 bits soient alignes dans une paire de registres adequate (consultez syscall(2) pour plus de renseignements). Sur ces architectures, la signature d'appel de posix_fadvise() indiquee dans le SYNOPSIS imposerait le gaspillage d'un registre de remplissage entre les parametres fd et offset. Pour cette raison, ces architectures definissent un appel systeme different qui reordonne correctement les parametres, mais qui est sinon strictement similaire a posix_fadvise(). Par exemple, depuis Linux 2.6.14, l'architecture ARM utilise l'appel systeme suivant : long arm_fadvise64_64(int fd, int advice, loff_t offset, loff_t len); Ces details dependants de l'architecture sont generalement invisibles des applications grace a la glibc et sa fonction d'enrobage posix_fadvise() qui utilise l'appel systeme adapte a l'architecture. STANDARDS POSIX.1-2008. HISTORIQUE POSIX.1-2001. Le noyau est d'abord apparue dans Linux 2.5.60 ; l'appel systeme sous-jacent est appele fadvise64(). La prise en charge dans l'espace utilisateur est disponible depuis la glibc 2.2, a travers la fonction posix_fadvise(). Depuis Linux 3.18, la gestion de l'appel systeme sous-jacent est facultative, selon le positionnement de l'option de configuration CONFIG_ADVISE_SYSCALLS. Le type du parametre len a ete modifie de size_t en off_t dans la specification POSIX.1-2001 TC1. NOTES Le contenu du cache du tampon du noyau peut etre vide a l'aide de l'interface /proc/sys/vm/drop_caches decrite dans proc(5). On peut obtenir un instantane des pages d'un fichier residentes dans le cache du tampon en ouvrant un fichier, en le projetant avec mmap(2) et en appliquant mincore(2) a la projection. BOGUES Avant Linux 2.6.6, si le parametre len etait 0, la valeur etait interpretee comme << zero octets >> et non comme << tous les octets jusqu'a la fin du fichier >>. VOIR AUSSI fincore(1), mincore(2), readahead(2), sync_file_range(2), posix_fallocate(3), posix_madvise(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 posix_fadvise(2)