msync - Synchroniser un fichier et une projection en mémoire
Bibliothèque C standard (
libc,
-lc)
#include <sys/mman.h>
int msync(void addr[.length], size_t length, int flags);
msync() écrit les modifications qui ont été
effectuées sur la copie d'un fichier qui est projeté en
mémoire par
mmap(2) sur le système de fichiers. Si l'on
n'utilise pas cet appel, rien ne garantit que les changements soient
écrits avant la suppression de la projection par
munmap(2). Pour
être plus précis, la portion du fichier correspondant à
la zone mémoire commençant en
addr et ayant une longueur
de
length est mise à jour.
Le paramètre
flags devrait indiquer exactement
MS_ASYNC et
MS_SYNC et il peut aussi inclure le bit
MS_INVALIDATE. Ces bits
ont la signification suivante :
- MS_ASYNC
- Indiquer la programmation d'une mise à jour, mais
l'appel renvoie immédiatement.
- MS_SYNC
- Demander une mise à jour et attendre qu'elle se
termine.
- MS_INVALIDATE
- Demander d'invalider d'autres projections du même
fichier (pour qu'elles puissent être mises à jour avec les
nouvelles valeurs écrites récemment).
En cas de succès, zéro est renvoyé. En cas d'erreur,
-1 est renvoyé et
errno est définie pour
préciser l'erreur.
- EBUSY
-
MS_INVALIDATE était positionné dans
flags, mais un verrouillage mémoire existe pour l'intervalle
indiqué.
- EINVAL
-
addr n'est pas aligné sur une
frontière de page (un multiple de PAGESIZE) ou d'autres bits que
MS_ASYNC | MS_INVALIDATE | MS_SYNC sont à
1 dans flags. Ou bien MS_SYNC et MS_ASYNC sont
tous les deux spécifiés dans flags.
- ENOMEM
- La zone mémoire indiquée (ou une partie de
cette zone) n'est pas une projection.
POSIX.1-2001, POSIX.1-2008.
Cet appel a été introduit dans Linux 1.3.21 et utilisait
EFAULT au lieu de
ENOMEM. Dans Linux 2.4.19, ceci a
été remplacé par la valeur POSIX
ENOMEM.
Sur les systèmes conformes à la spécification POSIX sur
lesquels
msync() est disponible, les constantes symboliques
_POSIX_MAPPED_FILES et
_POSIX_SYNCHRONIZED_IO sont
définies dans
<unistd.h> comme étant des valeurs
supérieures à
0. (Consultez aussi
sysconf(3).)
POSIX spécifie qu'au moins
MS_SYNC ou
MS_ASYNC doit
être indiqué dans
flags, et que si aucun des deux n'est
indiqué
msync() échouera sur certains systèmes.
Cependant, Linux autorise d'appeler
msync() sans indiquer aucun des
deux attributs, avec une sémantique actuellement équivalente
à indiquer
MS_ASYNC. (Depuis Linux 2.6.19,
MS_ASYNC est sans effet, puisque le noyau suit correctement les pages
modifiées et les transfère vers le disque si besoin.)
Malgré le comportement de Linux, les applications portables et
destinées à être pérennes doivent indiquer au
moins
MS_SYNC ou
MS_ASYNC dans
flags.
mmap(2)
B.O. Gallmeister, POSIX.4, O'Reilly, p. 128–129 et 389–391.
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Jean-Philippe MENGUAL <
[email protected]>
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 à
[email protected]